使用git 分支合并到master主线,但因为同时修改一个文件,导致合并之后文件多出了很多<<<HEAD
这样的!如何解决冲突?一定要手动编辑冲突文件,去掉那些 <<<HEAD
>>>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