天天看點

Linux下Git的分支沖突版本中何時出現沖突

版本中何時出現沖突

從原始的分支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
           

繼續閱讀