使用git 分支合併到master主線,但因為同時修改一個文件,導致合併之後文件多出了很多<< 這樣的!如何解決衝突?一定要手動編輯衝突文件,去掉那些
<<
>>>DEV
再提交嗎?
cd ~
mkdir demo
cd demo
git init
git status // on branch master
echo "first line " >> index.txt
git add . && git commit -m "first head"
git status // on branch master
git branch // * master
git branch dev
git checkout dev
git branch // * dev ,master
ls // index.txt
echo "sec line in dev" >> index.txt
git add . && git commit -m "in branch dev"
git checkout master
git status // on branch master
echo "sec line on branch master" >> index.txt
git add . && git commit -m "2"
git merge dev
Auto-merging index.txt
CONFLICT (content): Merge conflict in index.txt
Automatic merge failed; fix conflicts and then commit the result.
git diff index.txt
diff --cc index.txt
index dda3583,8fa96cd..0000000
--- a/index.txt
+++ b/index.txt
@@@ -1,2 -1,2 +1,6 @@@
first line
++<<<<<<< HEAD
+sec line on branch master
++=======
+ sec line in dev
++>>>>>>> dev
first line
<<<<<<< HEAD
sec line on branch master
=======
sec line in dev
>>>>>>> dev
合併dev 到master,結果這個檔案出現了 <<< HEAD
>>> dev
這樣的,如何將他們合併成功?非得手動去編輯,再提交嗎?
有衝突肯定要手動編輯的!這個問題一般出現在多人團隊中!解決衝突的時候盡量和隊友一塊!
如果是確定可以合併(例如,當分支程式碼沒有問題時)時 merge 了產生衝突,那麼手動處理是必須的。當然,在 master 上處理衝突是很痛苦的。所以需要別的方法。
有兩個思路:
用 master 去 merge dev 分支,這樣衝突就發生在 dev 分支下,手動解決好之後再合併回 master 就是一個 fast-forward 而已;
用 git rebase
是的,因為你改動了同樣的地方,所以需要手動解決衝突,只要把標記出的位置合併為一處程式碼就行了。或者你可以用cherry-pick或rebase來防止某些衝突
一般用master分支合併dev分支,實際解決的衝突是在dev上的,建議仔細看衝突差異,以免影響別人的程式碼。
雖然命令列工具很強大,但是在理解了原理後使用視覺化工具還是很方便的,特別是解決衝突的時候。
當出現了這樣的衝突的時候,手動去解決確實要比較仔細。利用視覺化工具,可以方便的查看衝突的地方、快速的在各個衝突點跳轉,解決大多數衝突也只需要點擊幾次滑鼠即可。
推薦命令列結合視覺化工具來使用git,比較好的視覺化工具有TortoiseGit
建議使用p4merge等視覺化diff工具,另外只要開發者使用git都符合規範,是不會出現合併master衝突的,建議加強對開發者的培訓,規範化使用git,目前我這邊使用的是git-flow