創建分支
在本地終端運行 git branch『分支名稱』 新建一個分支,如新建一個名爲『learn-branch』的分支命令如下:
$ git branch learn-branch
切換分支
創建完分之後使用git branch命令查看分支:
* master
learn-branch
可以看到『 master 』分支上有一個『*』,說明當前是處在『 master 』分支上,也就是說創建完分支後需要我們手動切換到『learn-branch』,使用git checkout 『分支名稱』命令:
Switched to branch 'learn-branch'
再使用git branch命令查看,會發現已經切換到『learn-branch』分支:
* learn-branch
master
創建和切換分支兩條命令可以合起來,使用git checkout -b『分支名稱』命令可以創建一個分支並切換到此分支上。
合併分支
快進模式合併
快進式合併分支,也叫『Fast Foreword』,簡單的理解就是當要合併的分之和目標分支之間沒有衝突,只是多做了一些修改時就會採取『Fast Foreword』模式。
例如,我們切換到新建的『learn-branch』分支上,對『learn-git.txt 』文件加一行文字:
I am learning to use git.
然後提交此文件:
$git commit -m "edit learn-git.txt"
[learn-git fce6c4e] branch test
1 files changed, 1 insertions(+)
接着使用$ git checkout master命令切換回『 master 』分支,再查看『learn-git.txt 』文件,發現剛纔添加的內容並不存在!因爲那個提交是在『learn-branch』分支上,而『 master 』分支此刻的提交點並沒有變。
現在,我們把『learn-branch』分支的內容合併到『 master 』分支上:
Updating ca62ea0..fce6c4e
Fast-forward
learn-branch.txt | 1 +
1 file changed, 1 insertion(+)
git merge命令用於合併指定分支到當前分支,示例中是把指定分支『learn-branch』合併到『 master 』分支上。
合併完成後會發現『 master 』分支上的『learn-git.txt 』文件內容和在『learn-branch』分支上編輯後的內容完全一樣。此時如果想刪除『learn-branch』分支,可以使用命令$ git branch -d 『分支名稱』。
普通模式合併
當要合併的分之和目標分支之間存在衝突,就無法使用快進合併模式,需要先手動解決衝突,再提交。
例如,我們先切換到『learn-branch』分支,在『learn-git.txt 』文件中寫入下面文字並提交:
I am on "learn-branch" branch.
然後切換到『 master 』分支,在『learn-git.txt 』文件中寫入下面文字並提交:
I am on "master" branch.
接着輸入git merge learn-branch命令:
$ git merge learn-branch
Auto-merging learn-branch.txt
CONFLICT (content): Merge conflict in learn-git.txt
Automatic merge failed; fix conflicts and then commit the result.
Git 返回結果提醒我們『learn-git.txt 』文件存在衝突,需要我們手動解決衝突。運行 git status 命令,也可以看到出現衝突狀況:
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add ..." to mark resolution)
both modified: learn-git.txt
no changes added to commit (use "git add" and/or "git commit -a")
現在我們打開『learn-git.txt 』,會發現 Git 加入了衝突解決標記:
I am on master branch
=======
I am on learn-branch branch
>>>>>>> learn-branch
可以看到 ======= 隔開的上半部分,是 HEAD(即 master 分支,在運行 merge 命令時的工作分支)中的內容,下半部分是在 learn-branch 分支中的內容。解決衝突的辦法無非是二者選其一或者人工親自整合到一起。把上述內容修改爲這樣:
I am on master branch
接下來運行 git add 來告訴 Git 衝突已經解決,並運行 git commit 來完成合並:
$git commit -m "conflict resolved"
[master cadd265] conflict resloved