通常,合併分支時,如果可能,git會用fast forward模式,但是有些快速合併不能成而且合併時沒有衝突,這個時候會合並之後並做一次新的提交。
比如這樣的場景
在這種情況下,雖然主分支和dev分支都有修改操作,但是並不是修改同一個文件,因此可以正常完成合並;但是此時執行合併的時候,無法執行快速合併,而是git會自動將dev分支中的內容合併到master分支,然後執行提交。
(1)創建切換到dev分支下。
[[email protected] git_test]# git checkout -b dev Switched to a new branch 'dev' [[email protected] git_test]# git branch * dev master
(2)新建一個文件code3.txt編輯內容如下,並提交一個commit。
[[email protected] git_test]# echo "new file" >> code2.txt [[email protected] git_test]# git add code2.txt [[email protected] git_test]# git commit -m "add a new file" [dev 3b235ed] add a new file 1 file changed, 1 insertion(+) create mode 100644 code2.txt
(3)切換回master分支,編輯code.txt並進行一個提交。
[[email protected] git_test]# git checkout master Switched to branch 'master' [[email protected] git_test]# echo "*******">>code.txt [[email protected] git_test]# git add code.txt [[email protected] git_test]# git commit -m "add a new line ***" [master dd6ffc2] add a new line *** 1 file changed, 1 insertion(+)
(4)合併dev分支的內容到master分支。
# git merge dev
(5)出現如下提時,這是因爲這次不能進行快速合併,所以git提示輸入合併說明信息,輸入之後合併內容之後git會自動創建一次新的提交。
將第一行內容替換爲新版本的版本名,如下:
保存後會,自動提交。
(6)使用分支命令查看分支信息
(7)刪除dev分支。
# git branch -d dev Deleted branch dev (was 3b235ed).
關於禁用快速合併
如果要強制禁用fast forward模式,git就會在merge時生成一個新的commit,這樣的好處是:從分支歷史上就可以看出分支信息。
(1)創建並切換到dev分支。
[[email protected] git_test]# git checkout -b dev Switched to a new branch 'dev'
(2)修改code.txt內容,並提交一個commit。
[[email protected] git_test]# echo "66666666">>code.txt [[email protected] git_test]# git add code.txt [[email protected] git_test]# git commit -m 'add 666' [dev 5236145] add 666 1 file changed, 1 insertion(+)
(3)切換回master分支。
[[email protected] git_test]# git checkout master Switched to branch 'master'
(4)準備合併dev分支,請注意–no-ff參數,表示禁用Fast forward:
[[email protected] git_test]# git merge --no-ff -m "不使用快速合併" dev Merge made by the 'recursive' strategy. code.txt | 1 + 1 file changed, 1 insertion(+)
因爲本次合併要創建一個新的commit,所以加上-m參數,把commit描述寫進去。
(5)合併後,我們用git log看看分支歷史:
可以看到,不使用Fast forward模式,merge後就像這樣:
思考:在什麼情況下,應該禁用快速合併呢 在下篇博文Bug分支中,就有講述