Git 协同开发与冲突解决

张开发
2026/4/8 16:48:33 15 分钟阅读

分享文章

Git 协同开发与冲突解决
目录前言一、协同工作基础流程二、冲突是如何产生的三、解决冲突的标准步骤3.1 先拉取远程更新3.2 手动解决冲突3.3 标记已解决并提交四、实战演示命令行 IDEA4.1 命令行操作记录模拟 A 与 B 的冲突4.2 IDEA 中的图形化操作小结前言多人协作时Git 如何帮我们同步代码遇到冲突又该怎么处理本文将结合命令行与 IDEA 操作带你理清从拉取、提交到解决冲突的全流程。一、协同工作基础流程当多人共用同一个远程仓库时比如团队里的 A、B、C 各自负责不同模块每个人都需要将自己的代码推送到远程同时也要把别人已推送的更新同步到本地。这个“同步”动作通常通过两种命令完成git fetch 远程仓库名 # 仅抓取远端变更不自动合并 git pull 远程仓库名 # 抓取 自动合并等同于 fetch merge推荐做法在开始编写新代码前先执行git pull或fetch后手动merge确保本地包含远程所有最新提交。然后再写代码、提交、推送。如果别人修改的是不同文件pull后会自动合并成功无需额外操作。二、冲突是如何产生的假设有两个本地仓库模拟两位开发者都基于同一个远程仓库的master分支工作。开发者 A修改hello.txt并推送成功。开发者 B在没有拉取 A 的更新的情况下也修改了hello.txt的同一位置然后尝试推送。此时 B 会看到类似这样的错误! [rejected] master - master (fetch first) error: failed to push some refs to ... hint: Updates were rejected because the remote contains work that you do not have locally.原因很简单远程仓库的提交历史已经比 B 本地“领先”了且修改了同一个文件的同一区域。Git 无法自动决定保留谁的版本于是拒绝推送要求先解决冲突。三、解决冲突的标准步骤3.1 先拉取远程更新git pull origin master如果修改了不同文件通常会自动合并成功。但如果修改了同一个文件的同一位置pull会提示Auto-merging hello.txt CONFLICT (content): Merge conflict in hello.txt Automatic merge failed; fix conflicts and then commit the result.3.2 手动解决冲突进入冲突文件如hello.txt你会看到 Git 标记的冲突区域 HEAD 当前分支的修改内容 远程分支的修改内容 origin/master你需要手动编辑删除标记符号保留最终想要的内容。例如保留两行合并后的结果。3.3 标记已解决并提交git add hello.txt git commit -m 合并冲突保留双方修改 git push origin master四、实战演示命令行 IDEA4.1 命令行操作记录模拟 A 与 B 的冲突1. 初始状态远程已有基础提交$ git log --all --oneline --graph * f6cd762 (HEAD - master, origin/master) Add new file * d18649c Modify first * 74c74a8 Initial commit2. 开发者 A 提交并推送$ git commit -a -m Modify by A [master 12ab3ab] Modify by A $ git push origin # 成功推送3. 开发者 B 未拉取直接修改同一文件并推送→ 被拒绝$ git commit -a -m Modify by B [master 8608aa5] Modify by B $ git push origin ! [rejected] master - master (fetch first)4. B 执行git pull产生冲突$ git pull origin Auto-merging hello.txt CONFLICT (content): Merge conflict in hello.txt5. B 手动解决冲突后提交并推送# 编辑 hello.txt 解决冲突 $ git commit -a -m Modify by B finally $ git push origin6. 最终提交历史包含合并节点$ git log --all --graph --oneline * f19138b (HEAD - master, origin/master) Modify by B finally |\ | * 36504b6 Modify by A | * dfce350 Merge remote-tracking branch origin/master Merge commit by A | |\ | * | 12ab3ab Modify by A * | | 8608aa5 Modify by B | |/ |/| * | 4d3cd38 Modify by B |/ ...4.2 IDEA 中的图形化操作添加用户推送图标定义远程可修改分支名称表明IDEA的master分支是提交到远程仓库的main分支上在远程仓库中手动修改pom.xml文件内容在远程仓库中有5次提交但在本地还是4次提交点击这个拉取进行更新成功显示可以直接在IDEA首页来实现从远程仓库中克隆仓库至本地小结多人协作时冲突并不可怕。只要理解 Git 的fetch/pull/merge机制并掌握手动解决冲突的方法就能顺畅地与他人协同开发。希望这篇笔记能帮助你建立清晰的工作流告别“推送被拒绝”。

更多文章