玩轉GIT之終結git-flow中分支衝突系列問題

NO IMAGE

第一種處理方法

開發要求:
不能丟棄本地修改,因為其中的某些內容的確是我們需要的,此時需要對unmerged的檔案進行手動修改,刪掉其中衝突的部分。


情景再現:
比如你在A分支上commit了,然後PR了,這時你的PR沒有衝突的提示,可以合併。但是之後有人在你PR的目標上的相同位置做了修改,這個時候,你的PR就有衝突的提示了,不可以合併,怎麼辦?

解決方法:
需要先獲取遠端最新的origin/master分支的上的commitID,然後存在本地mstaer分支上的一個檔案內,然後再用git merge origin/master 合併到本地的檔案上。然後會出現衝突,再在衝突的檔案內根據需求將一些內容刪除掉,然後執行git add && git commit && git push origin 就不會再衝突了。

具體程式碼如下:

// 切換到`branchA`分支
git checkout branchA 
// 獲取最新commitID
git fetch origin
// 合併到本地檔案上
git merge origin/master
// 對衝突內容進行修改後,執行
git add .
git commint -m 'finished'
git push origin master branchA

下面是官方的一個例子,我寫了註釋

// 官方例子
// 第一步
git remote add upstream https://github.com/schacon/blink
// 第二步
git fetch upstream
// 輸出資訊
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
From https://github.com/schacon/blink
* [new branch]      master     -> upstream/master
// 第三步
git merge upstream/master
// 輸出資訊
Auto-merging blink.ino
CONFLICT (content): Merge conflict in blink.ino
Automatic merge failed; fix conflicts and then commit the result.
// 第四步
vim blink.ino
// 第五步
git add blink.ino
// 第六步
git commit
// 輸出資訊
[slow-blink 3c8d735] Merge remote-tracking branch 'upstream/master' \
into slower-blink
// 第七步
git push origin slow-blink
// 輸出資訊
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 682 bytes | 0 bytes/s, done.
Total 6 (delta 2), reused 0 (delta 0)
To https://github.com/tonychacon/blink
ef4725c..3c8d735  slower-blink -> slow-blink

第二種解決方法

如果我們確定遠端的分支正好是我們需要的,而本地的分支上的修改比較陳舊或者不正確,那麼可以直接丟棄本地分支內容,執行如下命令(看需要決定是否需要執行git fetch取得遠端分支):

$:git reset --hard origin/master