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

解決沖突

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

準(zhǔn)備新的 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 還會(huì)自動(dòng)提示我們當(dāng)前 master 分支比遠(yuǎn)程的 master 分支要超前 1 個(gè)提交。

在 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 無(wú)法執(zhí)行“快速合并”,只能試圖把各自的修改合并起來(lái),但這種合并就可能會(huì)有沖突,我們?cè)囋嚳矗?/p>

$ 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 文件存在沖突,必須手動(dòng)解決沖突后再提交。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用<<<<<<<,=======,>>>>>>>標(biāo)記出不同分支的內(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é)

當(dāng) Git 無(wú)法自動(dòng)合并分支時(shí),就必須首先解決沖突。解決沖突后,再提交,合并完成。

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