因此,讓我們看看用一個例子發生在這裏。以下是我認爲你做的複製:
$ git init && touch README && git add README && git commit -m 'Initial commit'
Initialized empty Git repository in /home/peter/ex/.git/
[master (root-commit) 56c1728] Initial commit
0 files changed
create mode 100644 README
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit
* 56c1728 (HEAD, master) Initial commit
$ git checkout -b branch1
Switched to a new branch 'branch1'
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit
* 56c1728 (HEAD, master, branch1) Initial commit
git checkout -b <new_branch>
將創建一個分支無論HEAD
是。看看branch1
現在如何指向與HEAD
相同的提交。
現在讓我們做一些提交。
$ touch A
$ git add A
$ git commit -m 'Add A'
[branch1 298c3f9] Add A
0 files changed
create mode 100644 A
$ touch B
$ git add B
$ git commit -m 'Add B'
[branch1 24ffff3] Add B
0 files changed
create mode 100644 B
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit
* 24ffff3 (HEAD, branch1) Add B
* 298c3f9 Add A
* 56c1728 (master) Initial commit
所以,現在,如果我們在HEAD
創建一個分支,這是發生了什麼。
$ git checkout -b branch2
Switched to a new branch 'branch2'
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit
* 24ffff3 (HEAD, branch2, branch1) Add B
* 298c3f9 Add A
* 56c1728 (master) Initial commit
這不是你究竟想要做的,但你繼續在branch2
工作。
$ touch C
$ git add C
$ git commit -m 'Add C'
[branch2 2cdb51b] Add C
0 files changed
create mode 100644 C
$ touch D
$ git add D
$ git commit -m 'Add D'
[branch2 db7fa2b] Add D
0 files changed
create mode 100644 D
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit
* db7fa2b (HEAD, branch2) Add D
* 2cdb51b Add C
* 24ffff3 (branch1) Add B
* 298c3f9 Add A
* 56c1728 (master) Initial commit
所以現在branch2
領先的master
4提交,但你真的只想branch2
爲2犯提前掌握(「添加C」和「添加d」)。我們可以用git rebase
來解決這個問題。您可以使用git checkout -b <new_branch> <start_point>
表格。
$ git checkout -b branch3 master
Switched to a new branch 'branch3'
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit
* c8a299f (branch2) Add D
* b9325dc Add C
| * 24ffff3 (branch1) Add B
| * 298c3f9 Add A
|/
* 56c1728 (HEAD, master, branch3) Initial commit