You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

git flow模式下如何避免PR合并时已删除文件夹反复触发合并冲突

问题根源

你团队遇到的冲突问题确实和最初的分支创建逻辑错误直接相关:
标准Git Flow的分支基线是main分支为生产基准,从main检出develop分支,但你团队的操作是从旧master切出develop,再从develop切出main,同时两个分支分别执行了拆分backend到独立仓库、把frontend目录内容提到根目录的操作,导致两个分支的公共分叉点停在目录拆分前的版本。Git做三路合并时会对比分叉点到两个分支HEAD的所有变更,识别到两侧对旧目录、旧文件的删除操作提交记录不一致,就会触发大量不存在文件的冲突,甚至自动带回旧目录内容。

最优解决方案

优先选择「全量同步基线后重建develop分支」的方案,操作成本最低,后续不会再出现同类冲突,适合绝大多数不需要保留旧分支合并历史的团队:

前置准备

  1. 通知所有团队成员暂时暂停向develop、main分支提交代码,将本地未提交的改动推到自己的个人功能分支存储
  2. 本地拉取最新的远程分支代码,同时打备份标签防止操作失误回滚:
# 拉最新代码
git checkout main && git pull origin main
git checkout develop && git pull origin develop
# 打备份标签
git tag backup_main_before_fix origin/main
git tag backup_develop_before_fix origin/develop

操作步骤

  1. 切换到main分支,以develop的内容为基准做一次无冲突合并,完全覆盖main的内容:
git checkout main
git merge -s ours develop --no-ff -m "chore: 同步develop最新代码作为生产基线"

-s ours 参数表示合并时完全采用被合并分支(develop)的所有内容,忽略main侧所有差异提交,不会产生任何冲突。

  1. 推送合并后的main分支到远程:
git push origin main
  1. 删除旧的develop分支,从最新的main分支重新检出基线一致的新develop分支:
# 删除远程旧develop
git push origin --delete develop
# 从新main切新develop
git checkout main
git checkout -b develop
# 推送新develop到远程
git push origin develop
  1. 通知所有团队成员删除本地旧的develop分支,重新拉取远程新develop分支即可恢复正常开发流程。
备选方案(需保留完整提交历史时使用)

如果团队需要保留develop分支的所有历史提交记录,不想做覆盖合并,可以用rebase对齐基线:

  1. 拉取最新的main、develop代码后,切换到develop分支执行rebase,冲突默认采用develop的内容解决:
git checkout develop
git rebase -X theirs main
  1. rebase完成后强制推送develop到远程(需确保操作期间没有其他人提交代码到develop)
  2. 后续从develop向main提PR时就不会再有历史冲突。

内容的提问来源于stack exchange,提问作者ROODAY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:45:00