Git合并冲突怎么办?新手必看解决步骤

git合并冲突,听起来挺吓人对吧?其实就跟两个人同时改了一句话一样,你改你的,我改我的,最后合在一起,Git也不知道该听谁的。别慌,我来手把手教你解决。

冲突是怎么发生的?

举个简单例子:你和同事都在改同一个文件index.html。你把文件里的标题改成了“欢迎光临”,同事把同一行改成了“Hello World”。当你执行git pull或者git merge时,Git发现同一行有俩版本,它就懵了,告诉你“有冲突”。

说白了,冲突就是Git不会读心术,它需要你亲自来选:到底留谁的?或者两个都留着。

git merge conflict example

第一步:看看谁和谁冲突了

当你合并时看到这个提示:

Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

别慌,这只是Git在撒娇。用git status看看哪些文件冲突:

git status

你会看到红色的both modified: index.html

第二步:打开文件,找到冲突标记

用你喜欢的编辑器打开冲突文件(比如VS Code),你会看到类似这样的东西:

<<<<<<< HEAD
这是你当前分支的内容
=======
这是你要合并进来的内容
>>>>>>> feature-branch
  • <<<<<<< HEAD=======之前的是你当前分支的版本。
  • =======>>>>>>> feature-branch的是目标分支的版本。

你需要手动决定保留哪一部分,或者修改成新的内容。删掉所有冲突标记(几个小于号、等号、大于号)就行。

比如你想保留两句话合并一下:

这是你当前分支的内容 + 这是你要合并进来的内容

或者只留一个。

resolve conflict in editor

第三步:解决完后,标记为已解决

保存文件后,用git add告诉Git这个文件冲突搞定了:

git add index.html

接着继续合并流程:

git commit

Git会弹出一个默认的合并提交信息,你直接保存退出就行。

如果是在git merge过程中,合并提交后合并就完成了。如果是git pull,一样的步骤。

第四步:检查一下,别留尾巴

git status确保没有未解决的冲突。如果有,重复上面的步骤。

特殊情况:冲突太多怎么办?

如果冲突的文件很多,或者一个文件里冲突几十处,手动改太累。可以试试用工具:

  • VS Code自带合并编辑器,超级好用(右键点击文件 -> 选择“解决冲突”)。
  • 命令行工具git mergetool,它会调用你配置的对比工具(比如Beyond Compare、Meld)。配置一下:

    git config --global merge.tool vimdiff   # 或者 meld, beyondcompare

    然后运行git mergetool,它会一个文件一个文件地帮你对比。

避坑指南

  1. 不要随便删东西:冲突标记里的内容就是代码,别全删了,除非你真的不要了。
  2. 先pull再push:养成习惯,在推送前先拉取最新代码,减少冲突概率。
  3. 小步提交:每次提交只改少量文件,冲突范围小,好解决。
  4. 沟通:如果和同事同时改同一个大区域,提前打个招呼。

常见问题

Q:我还没解决完冲突,想暂停一下?
A:直接关闭编辑器就行,Git会记住冲突状态。下次回来接着干,git status告诉你哪些文件还没解决。

Q:解决冲突时我搞乱了文件,想回退到冲突前?
A:可以用git merge --abort(如果还在合并过程中),它会回到合并前的状态。或者git reset --hard HEAD(谨慎使用,会丢掉没提交的改动)。

Q:为什么我解决了冲突,git commit时让我写提交信息?
A:因为合并提交需要一个说明。你可以直接:wq(vim下)保存默认信息。

好了,Git合并冲突就这么回事。刚开始可能有点慌,多试几次就熟练了。记住:冲突不是bug,是特性——它保护了你的代码不被覆盖。

git merge success

觉得内容不错?我要

评论 暂无评论
暂无评论,快来抢沙发吧~