版本中何時出現沖突
從原始的分支master中分出分支feature1,對
readme.txt
檔案進行修改,原始檔案如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Creating a new branch.
在feature1分支中添加一行:
Creating a new branch is quick AND simple.
然後切換回master分支,在
readme.txt
中也添加一行:
Creating a new branch is quich & simple.
目前情況下,master分支和feature1分支中,都比分支分出去之前更新了一個版本,我們對目前的版本進行合并,輸出如下:
[email protected]:~/learngit$ git merge feature1
自動合并 readme.txt
沖突(内容):合并沖突于 readme.txt
自動合并失敗,修正沖突然後送出修正的結果。
合并失敗了,還提示合并過程中在readme.txt檔案發生了沖突,我們查閱目前的git狀态:
[email protected]:~/learngit$ git status
位于分支 master
您的分支領先 'origin/master' 共 2 個送出。
(使用 "git push" 來釋出您的本地送出)
您有尚未合并的路徑。
(解決沖突并運作 "git commit")
(使用 "git merge --abort" 終止合并)
未合并的路徑:
(使用 "git add <檔案>..." 标記解決方案)
雙方修改: readme.txt
修改尚未加入送出(使用 "git add" 和/或 "git commit -a")
輸出提示我們目前處于master分支,目前本地的版本還沒有push到遠端庫,并且本地比遠端領先兩個版本。之後提示有尚未合并的路徑,有兩個解決方案,可以先人工解決沖突然後再送出,或者使用
git merge --abort
取消合并操作。最後,提示了此次合并中出現沖突的檔案。我們再次打開這個檔案:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Creating a new branch.
<<<<<<< HEAD
Creating a new branch is quich & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
兩個分支下對這個檔案的修改,均被合并進入這個檔案,還标記出來了哪部分來自哪個分支。我們直接把内容修改為如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Creating a new branch.
Creating a new branch is quich and simple.
按照提示重新添加并送出:
git add readme.txt
git commit -m "comflict fixed"
再檢視目前版本庫下的情況:
[email protected]:~/learngit$ git branch
feature1
* master
[email protected]:~/learngit$ ls
readme.txt
[email protected]:~/learngit$ git status
位于分支 master
您的分支領先 'origin/master' 共 4 個送出。
(使用 "git push" 來釋出您的本地送出)
無檔案要送出,幹淨的工作區
分支feature1還存在,但是沖突消失了。我們也可以用帶參數的
git log
檢視分支的合并情況:
[email protected]:~/learngit$ git log --graph --pretty=oneline --abbrev-commit
* e1c955b (HEAD -> master) conflict fixed
|\
| * d0e6106 (feature1) AND simple
* | 6536364 & simple
|/
* 4c2b68d branch test
* 5d9ff40 (origin/master) append GPL
* 4c93eef wrote a readme file
他記錄了我們全部的修改記錄,其中分支出現沖突的部分被用兩個分支标記出來,現在他們合并成了同一個分支。最後,我們隻需要删除feature1分支
git branch -d feature1