← 返回工具首页

Git Commit 冲突是什么?

Git Commit 冲突(Merge Conflict)发生在 Git 自动合并失败时——当两个分支修改了同一文件的同一处,或者一个分支删除了某个文件而另一个分支修改了它,Git 就不知道该听谁的了,这时候需要你手动决定保留什么。

听起来很可怕,但实际上只要搞清楚冲突标记的格式,5 分钟内就能解决大部分冲突。

冲突是怎么产生的?

典型的场景:

# 1. 你在 feature 分支上开发
git checkout -b feature/user-profile

# 2. 同事在 main 分支提交了修改
git checkout main
# ... 修改了 utils.js
git commit -m "fix: 修复工具函数"

# 3. 你尝试把 main 合并到 feature
git checkout feature/user-profile
git merge main
# 💥 冲突!两个分支都改了 utils.js

当 Git 尝试自动合并失败时,它会在冲突文件中插入特殊的标记:

<<<<<<< HEAD
const version = '1.2.0';
=======
const version = '2.0.0';
>>>>>>> feature/user-profile

格式很清晰:<<<<<<< HEAD 是当前分支的版本,>>>>>>> 后面是待合并分支的版本,中间是分隔线。

解决冲突的标准流程

第一步:找到所有冲突文件

git status
# Unmerged path 文件就是冲突文件
# 或者用:
git diff --name-only --diff-filter=U

第二步:逐个处理冲突文件

打开文件,找到 <<<<<<<>>>>>>> 标记,决定保留哪部分内容,或者两者都保留(需要手动合并)。

第三步:标记为已解决

# 手动编辑完成后
git add <file>
# 或者一次性添加所有已解决的冲突文件
git add .

第四步:完成 commit

git commit -m "merge: 解决 utils.js 冲突,保留新版本号"

三种常见的冲突类型

1. 同一行被不同分支修改

这是最常见的类型,两个分支都改了同一行代码:

<<<<<<< HEAD
const apiUrl = 'https://api.v1.example.com';
=======
const apiUrl = 'https://api.v2.example.com';
>>>>>>> feature/new-api

解决方式:和同事沟通确认该用哪个版本,或者合并两处的修改。

2. 一个分支删文件,另一个修改了它

# 如果对方删除了文件,你修改了它
git status 会显示:
deleted by them: config.json

# 你需要决定:真的要删除还是保留?
git rm config.json    # 确认删除
git checkout --ours config.json  # 或恢复你的版本

3. 同一文件被多个分支修改了多处

最复杂的情况,需要逐个解决所有冲突点。建议先 git diff 看清楚所有冲突点再动手。

用 VSCode 解决冲突(最推荐)

VSCode 内置了冲突编辑器,体验非常好:

  1. 打开冲突文件,VSCode 会用不同颜色标出冲突区域
  2. 点击 "Accept Current Change"、"Accept Incoming Change" 或 "Accept Both Changes"
  3. 所有冲突解决完后,文件里就不再有 <<<<<<< 标记了
  4. 保存文件,git add . 然后 git commit

Abort——放弃合并的正确方式

如果冲突太复杂,你想重新来过:

git merge --abort

这会恢复到合并之前的状态,你可以在处理好分支关系后再尝试合并。

避免冲突的最佳实践

自动化工具推荐

如果你经常遇到复杂冲突,可以用这些工具:

一句话总结

Git 冲突不是 bug,是 Git 在告诉你"我不懂这个,你来告诉我该怎么做"。解决冲突的思路很简单:看清楚标记,理解两个版本的意图,然后决定保留哪个。绝大多数冲突 5 分钟内都能解决,不用慌。

💡 遇到同类问题?用工具快速解决

试试这些配套工具,无需注册,打开即用

正则表达式测试器

常见问题

Q: 遇到 gitcommit冲突怎么解决,是什么原因导致的?
A: 常见原因有:数据格式不符合规范(如 JSON 多了逗号或少了引号)、字符编码不统一(UTF-8 和 GBK 混用)、特殊字符未正确转义,或接口返回了非标准数据。先用工具验证格式是最快的排查方式。
Q: gitcommit冲突怎么解决 会影响程序正常运行吗?
A: 会的。格式错误会导致数据无法正常解析,轻则功能异常,重则程序崩溃。尤其是涉及支付、用户输入等关键流程时,这类问题必须第一时间修复。
Q: gitcommit冲突怎么解决 有没有自动修复的办法?
A: 大多数格式问题可以用在线工具自动修复。如果是自己生成的 JSON/编码数据,修复后再重新提交即可;如果是第三方接口返回的格式问题,则需要联系对方修正或做容错处理。
Q: 修复后还需要注意什么?
A: 建议增加格式校验环节,在数据提交前或接收后先做格式验证(用 JSON.parse 或对应工具),避免再次出现同样问题。同时统一前后端编码规范,从源头减少这类错误。