Git 如何解决代码冲突
两个人修改了同一段代码,Git 不知道该保留哪一份,就可能出现冲突。我们需要打开文件,整理成正确的代码,再提交。
下面以把主分支 main 的最新代码合入自己的 feature/profile 分支为例。操作时,把分支名和文件路径换成项目中实际使用的名称。
1. 获取最新代码并合并
先运行 git status,确认没有尚未提交的改动。有的话,先提交自己的工作,再继续:
1 | git switch feature/profile # 切换到自己的开发分支 |
origin 是远程仓库的常用名称,origin/main 代表获取到的远程主分支。
如果出现 CONFLICT,说明有冲突。运行下面的命令查看文件列表:
1 | git status |
其中标记为 both modified(双方都修改)的文件需要处理。没有冲突时,可以跳过修改步骤,验证代码后推送。
2. 打开文件,修改冲突内容
假设 src/profile.ts 中出现了下面的内容:
1 | <<<<<<< HEAD |
在本次合并中:
<<<<<<< HEAD到=======之间,是自己当前分支的代码。=======到>>>>>>> origin/main之间,是主分支的代码。
如果需求确定使用“匿名用户”,就把上面整段改成:
1 | export const name = "匿名用户"; |
最终要保留正确的代码,并删除冲突标记。 如果双方的功能都需要,就手动整合;拿不准时,找修改这段代码的同事确认,不要直接覆盖。
使用 VS Code 更方便
打开冲突文件后,可以点击对应按钮:
| 按钮 | 作用 |
|---|---|
| Accept Current Change | 保留当前分支的这段代码 |
| Accept Incoming Change | 保留主分支传入的这段代码 |
| Accept Both Changes | 两段都保留,还需要自己整理 |
例如,上面的代码如果选择“两段都保留”,就会重复声明 name,仍然需要手动修改。按钮只是帮你编辑代码,不能判断哪种结果正确。
3. 检查并提交
处理完文件后保存,再告诉 Git 这个文件已解决:
1 | git add src/profile.ts |
如果有多个冲突文件,逐个修改并执行 git add。确认 git status 不再列出未解决的文件,再检查本次提交内容:
1 | git diff --cached |
运行项目已有的测试或构建,确认功能正常后提交并推送:
1 | git commit -m "Merge main and resolve conflicts" |
如果已经创建了 PR(合并请求),推送后它会自动更新。如果仍提示冲突,检查主分支是否又有新提交,重新获取并合并。
想取消这次合并?
如果还在解决冲突、尚未完成合并提交,可以执行:
1 | git merge --abort |
这会放弃本次合并和冲突处理结果。需要保留的手动修改,先另存一份。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 HJ BLOG!




