如果事先已经约好,比如各自完成的功能,那么发生冲突的概率就很小。
如果开发时候,没有约定好规范,发生冲突概率大。
模拟场景:
在main分支上修改并保存test.html文件中的div标签的文本内容为“这是main分支上的代码”
在终端执行 git add .
git commit -m main分支修改test.html
git checkout dev (现在切换到dev分支)
在dev分支上修改并保存test.html文件中的div标签的文本内容为“这是dev分支上的代码”
在终端执行 git add .
git commit -m dev分支修改test.html
git checkout main (现在切换到main分支)
【现在把dev分支上的代码合并到main分支上】
git merge dev (发现报错merge failed。失败在test.html文件当中。)
打开test.html文件,其中可能发现有编辑器的提示。我们在这个文件的同一地方在不同分支上进行了修改,git就不知道在怎么解决,让我们来解决。
<<<<<< HEAD (当前分支修改的代码)
这是main分支上的代码
===== (等号下面是其他分支合并过来的代码)
这是dev分支上的代码
>>>>>> dev
【如何解决冲突:方式一】
git merge --abort (忽略其他分支的代码,保留原分支的代码。即忽略dev分支代码,保留main分支代码)
打开test.html文件,其中发现冲突没有了。
【如何解决冲突:方式二】
git merge dev (又出现冲突了)
打开test.html文件,手动删除符号,保存后变成如下:
这是main分支上的代码
这是dev分支上的代码
(即把特殊符号删除,留下和其他同事沟通后的代码)
在终端执行
git status (出现红色提示 both modified test.html。即同时修改了这个文件)
git add .
git commit (弹出一个可编辑的界面。输入i可进入编辑模式。输入"这是解决冲突之后的正确代码 解决了test.html当中的冲突")(这样是给大家一个标识,就是解决了哪一个分支上面的哪一个文件,最终我们怎么积解决的)(先按esc再输入:wq,就可以退出编辑界面。)
git status (此时没有东西可以提交了)
git commit -m 解决冲突之后的代码