git merge dev 分支合併到master 如何解決衝突
黄舟
黄舟 2017-05-02 09:23:41
0
6
1315

使用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"

開始合併dev 到master報錯

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 // on master

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

文件 index.txt 全部內容,在master分支下

first line 
<<<<<<< HEAD
sec line on branch master
=======
sec line in dev 
>>>>>>> dev

合併dev 到master,結果這個檔案出現了 <<< HEAD >>> dev 這樣的,如何將他們合併成功?非得手動去編輯,再提交嗎?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(6)
淡淡烟草味

有衝突肯定要手動編輯的!這個問題一般出現在多人團隊中!解決衝突的時候盡量和隊友一塊!

某草草

如果是確定可以合併(例如,當分支程式碼沒有問題時)時 merge 了產生衝突,那麼手動處理是必須的。當然,在 master 上處理衝突是很痛苦的。所以需要別的方法。

有兩個思路:

  1. 用 master 去 merge dev 分支,這樣衝突就發生在 dev 分支下,手動解決好之後再合併回 master 就是一個 fast-forward 而已;

  2. 用 git rebase

黄舟

是的,因為你改動了同樣的地方,所以需要手動解決衝突,只要把標記出的位置合併為一處程式碼就行了。或者你可以用cherry-pick或rebase來防止某些衝突

过去多啦不再A梦

一般用master分支合併dev分支,實際解決的衝突是在dev上的,建議仔細看衝突差異,以免影響別人的程式碼。

滿天的星座

雖然命令列工具很強大,但是在理解了原理後使用視覺化工具還是很方便的,特別是解決衝突的時候。
當出現了這樣的衝突的時候,手動去解決確實要比較仔細。利用視覺化工具,可以方便的查看衝突的地方、快速的在各個衝突點跳轉,解決大多數衝突也只需要點擊幾次滑鼠即可。
推薦命令列結合視覺化工具來使用git,比較好的視覺化工具有TortoiseGit

大家讲道理

建議使用p4merge等視覺化diff工具,另外只要開發者使用git都符合規範,是不會出現合併master衝突的,建議加強對開發者的培訓,規範化使用git,目前我這邊使用的是git-flow

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板