鍍金池/ 教程/ Java/ 解決沖突
操作標簽
多人協(xié)作
解決沖突
Git 的誕生
工作區(qū)和暫存區(qū)
搭建 Git 服務(wù)器
Bug 分支
配置別名
從遠程庫克隆
分支
添加遠程庫
分支管理策略
撤銷修改
安裝 Git
管理修改
生成 SSH key
GitHub
倉庫狀態(tài)
忽略特殊文件
刪除文件
Feature 分支
創(chuàng)建與合并分支
創(chuàng)建版本庫
創(chuàng)建標簽
版本回退
集中式 vs 分布式

解決沖突

人生不如意之事十之八九,合并分支往往也不是一帆風(fēng)順的。

準備新的 feature1 分支,繼續(xù)我們的新分支開發(fā):

$ git checkout -b feature1
Switched to a new branch 'feature1'

修改 readme.txt 最后一行,改為:

Creating a new branch is quick AND simple.

在 feature1 分支上提交:

$ git add readme.txt 
$ git commit -m "AND simple"
[feature1 75a857c] AND simple
 1 file changed, 1 insertion(+), 1 deletion(-)

切換到 master 分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.

Git 還會自動提示我們當前 master 分支比遠程的 master 分支要超前 1 個提交。

在 master 分支上把 readme.txt 文件的最后一行改為:

Creating a new branch is quick & simple.

提交:

$ git add readme.txt 
$ git commit -m "& simple"
[master 400b400] & simple
 1 file changed, 1 insertion(+), 1 deletion(-)

現(xiàn)在,master 分支和 feature1 分支各自都分別有新的提交,變成了這樣:

http://wiki.jikexueyuan.com/project/git-tutorial/images/branch6.png" alt="" />

這種情況下,Git 無法執(zhí)行“快速合并”,只能試圖把各自的修改合并起來,但這種合并就可能會有沖突,我們試試看:

$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

果然沖突了!Git 告訴我們,readme.txt 文件存在沖突,必須手動解決沖突后再提交。git status 也可以告訴我們沖突的文件:

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both modified:      readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

我們可以直接查看 readme.txt 的內(nèi)容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內(nèi)容,我們修改如下后保存:

Creating a new branch is quick and simple.

再提交:

$ git add readme.txt 
$ git commit -m "conflict fixed"
[master 59bc1cb] conflict fixed

現(xiàn)在,master 分支和 feature1 分支變成了下圖所示:

http://wiki.jikexueyuan.com/project/git-tutorial/images/branch7.png" alt="" />

用帶參數(shù)的git log也可以看到分支的合并情況:

$ git log --graph --pretty=oneline --abbrev-commit
*   59bc1cb conflict fixed
|\
| * 75a857c AND simple
* | 400b400 & simple
|/
* fec145a branch test
...

最后,刪除 feature1 分支:

$ git branch -d feature1
Deleted branch feature1 (was 75a857c).

工作完成。

http://wiki.jikexueyuan.com/project/git-tutorial/images/resolv-conflix-on-merge.gif" alt="" />

小結(jié)

當 Git 無法自動合并分支時,就必須首先解決沖突。解決沖突后,再提交,合并完成。

git log --graph命令可以看到分支合并圖。