Git 冲突解决完全指南

小飞兽 工具&效率 366 次阅读 2026-05-14

概述

Git 冲突(Merge Conflict)发生在两个分支对同一文件的同一位置进行了不同的修改,Git 无法自动合并时。冲突是团队协作中不可避免的现象,掌握正确识别、分析和解决冲突的方法,是每个开发者的必备技能。

基础语法

冲突通常发生在以下场景:两个分支修改了同一文件的同一行;一个分支删除了某个文件,另一个分支修改了它;多个分支对同一文件的多个位置进行了不兼容的修改。

    • <<<<<<< HEAD:当前分支的冲突起始标记。
    • =======:分隔线,上方是当前分支的版本,下方是待合并分支的版本。
    • >>>>>>> branch-name:待合并分支的冲突结束标记。
    • git status:查看当前仓库状态,冲突文件会显示为 unmerged。

    完整代码示例+注释

    # === 触发冲突的场景 ===
    git checkout -b feature/user-profile
    echo "name: Alice" > config.txt
    git add config.txt
    git commit -m "Update config on feature branch"
    

    git checkout main
    echo "email: alice@example.com" > config.txt
    git add config.txt
    git commit -m "Update config on main branch"

    git merge feature/user-profile

    === 查看冲突状态 ===

    git status cat config.txt

    === 手动解决冲突 ===

    编辑 config.txt,保留需要的部分

    删除冲突标记

    git add config.txt
    git commit -m "Resolve merge conflict in config.txt"

    === 使用 git mergetool 图形化解决冲突 ===

    git mergetool

    === 使用 git checkout 保留某一方的全部修改 ===

    git checkout --ours config.txt git checkout --theirs config.txt

    git add config.txt
    git commit -m "Resolve conflict by accepting their version"

    === 放弃合并,恢复到合并前的状态 ===

    git merge --abort

    运行效果

    执行 merge 操作后,如果出现冲突,Git 会在冲突文件中插入标记。开发者的任务是逐一处理每个冲突区域,决定保留哪一方的内容,然后删除所有冲突标记。使用 git mergetool 可以启动图形化合并工具,非常直观。

    常见问题

    Q1:解决冲突时如何判断应该保留哪一方的代码
    需要根据业务逻辑判断。如果两个修改都是必要的(如一个改了这行,另一个改了另一行),则合并两者。

    Q2:rebase 过程中出现冲突怎么办
    解决冲突后执行 git add 暂存,然后 git rebase --continue 继续重放下一个提交。

    Q3:冲突文件很多,如何高效处理
    可以使用 git diff --name-only --diff-filter=U 列出所有冲突文件。

    Q4:合并提交后才发现解决冲突时有错误怎么办
    可以使用 git revert 撤销合并提交,或用 git reset --hard 回到合并前的状态重新合并。

    延伸阅读

    • Git 官方文档 - 高级合并:https://git-scm.com/book/zh/v2/Git-工具-高级合并
  • Meld / kdiff3:跨平台的免费图形化合并工具。
  • VSCode 内置 Git 工具:自带的合并编辑器支持三路合并视图。