git合并冲突,听起来挺吓人对吧?其实就跟两个人同时改了一句话一样,你改你的,我改我的,最后合在一起,Git也不知道该听谁的。别慌,我来手把手教你解决。
冲突是怎么发生的?
举个简单例子:你和同事都在改同一个文件index.html。你把文件里的标题改成了“欢迎光临”,同事把同一行改成了“Hello World”。当你执行git pull或者git merge时,Git发现同一行有俩版本,它就懵了,告诉你“有冲突”。
说白了,冲突就是Git不会读心术,它需要你亲自来选:到底留谁的?或者两个都留着。

第一步:看看谁和谁冲突了
当你合并时看到这个提示:
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的是目标分支的版本。
你需要手动决定保留哪一部分,或者修改成新的内容。删掉所有冲突标记(几个小于号、等号、大于号)就行。
比如你想保留两句话合并一下:
这是你当前分支的内容 + 这是你要合并进来的内容或者只留一个。

第三步:解决完后,标记为已解决
保存文件后,用git add告诉Git这个文件冲突搞定了:
git add index.html接着继续合并流程:
git commitGit会弹出一个默认的合并提交信息,你直接保存退出就行。
如果是在git merge过程中,合并提交后合并就完成了。如果是git pull,一样的步骤。
第四步:检查一下,别留尾巴
用git status确保没有未解决的冲突。如果有,重复上面的步骤。
特殊情况:冲突太多怎么办?
如果冲突的文件很多,或者一个文件里冲突几十处,手动改太累。可以试试用工具:
- VS Code自带合并编辑器,超级好用(右键点击文件 -> 选择“解决冲突”)。
命令行工具
git mergetool,它会调用你配置的对比工具(比如Beyond Compare、Meld)。配置一下:git config --global merge.tool vimdiff # 或者 meld, beyondcompare然后运行
git mergetool,它会一个文件一个文件地帮你对比。
避坑指南
- 不要随便删东西:冲突标记里的内容就是代码,别全删了,除非你真的不要了。
- 先pull再push:养成习惯,在推送前先拉取最新代码,减少冲突概率。
- 小步提交:每次提交只改少量文件,冲突范围小,好解决。
- 沟通:如果和同事同时改同一个大区域,提前打个招呼。
常见问题
Q:我还没解决完冲突,想暂停一下?
A:直接关闭编辑器就行,Git会记住冲突状态。下次回来接着干,git status告诉你哪些文件还没解决。
Q:解决冲突时我搞乱了文件,想回退到冲突前?
A:可以用git merge --abort(如果还在合并过程中),它会回到合并前的状态。或者git reset --hard HEAD(谨慎使用,会丢掉没提交的改动)。
Q:为什么我解决了冲突,git commit时让我写提交信息?
A:因为合并提交需要一个说明。你可以直接:wq(vim下)保存默认信息。
好了,Git合并冲突就这么回事。刚开始可能有点慌,多试几次就熟练了。记住:冲突不是bug,是特性——它保护了你的代码不被覆盖。

觉得内容不错?我要