如何解决 Git 中的冲突?

当多个开发者同时修改同一个文件时,可能会在 Git 中出现冲突。本文介绍了识别和手动解决这些冲突的详细步骤,以及预防冲突的最佳实践。

工程化与构建 中等 版本控制 Git 冲突处理
  1. 冲突概述: Git冲突发生在多个更改尝试修改同一文件的同一区域时,Git无法自动合并如拉取(pull)、合并(merge)或变基(rebase)等操作。
    • 常见场景:不同分支merge冲突、同一分支pull/push时本地与远程修改未同步。
  2. 识别冲突:
    • 执行命令后(如git pull),Git会输出错误提示,例如:
      CONFLICT (content): Merge conflict in file.txt  
      Auto merge failed; fix conflicts and then commit result.  
      
    • 使用git status查看冲突文件和状态。
  3. 手动解决步骤:
    • 打开冲突文件: 定位到文件(如file.txt),内容包含冲突标记:
      <<<<<<< HEAD  
      本地分支修改的代码  
      =======  
      远程或其他分支修改的代码  
      >>>>>>> branch_name  
      
      • <<<<<<< HEAD=======为当前本地修改。
      • =======>>>>>>> branch_name为要合并的分支修改。
    • 编辑修改:
      • 保留一方代码(删除对方的冲突块)。
      • 保留两者代码(删除所有<<<<<<<, =======, >>>>>>>标记后合并更改)。
    • 保存文件: 确保文件内容无误。
  4. 标记冲突已解决并完成操作:
    • 添加文件到暂存区:
      git add file.txt  
      
    • 根据上下文继续操作:
      • 若冲突因merge引起: git commit -m "解决冲突"
      • 若冲突因rebase引起: git rebase --continue
    • 推送更改: git push(若变基后需用 git push -f 强制覆盖远端)。
  5. 可选的工具辅助方法:
    • 若有未提交的本地更改:
      • 暂存修改: git stash
      • 拉取更新: git pull
      • 恢复并解决冲突: git stash apply 后执行上述第3-4步。
    • 丢弃本地冲突文件使用远程覆盖:
      git checkout -- path/to/file  
      git pull  
      
  6. 预防冲突的最佳实践:
    • 开发前优先执行git pull同步最新代码,并与团队成员提前沟通修改范围。
    • 采用分支策略(如每个开发者在独立分支修改后合并),减少同时编辑同一文件的几率。

遵循这些步骤确保协作高效且代码一致性得到维护。