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

如何用三路合并策略自动解决Git子树冲突?

解决Git子树冲突并自动接受远程仓库变更

方法一:通过git subtree pull传递合并策略参数

  • 确保工作区干净
    首先处理仓库A中未提交的修改,避免报错:

    git stash push -m "暂存子树B的本地修改"
    
  • 执行带合并策略的subtree拉取
    使用递归合并策略并指定theirs选项,自动接受仓库B的变更:

    git subtree pull --prefix repoB repoB develop --squash -s recursive -X theirs
    

    这里的-X theirs会让Git在冲突时优先采用远程仓库B的版本,而-s recursive是Git默认的三路合并策略,适合处理子树这类复杂合并场景。

  • 恢复暂存的修改(可选)
    如果后续需要找回之前暂存的本地修改,可执行:

    git stash pop
    

    注意:这会再次引入冲突,需要手动处理或选择丢弃。

方法二:直接用远程仓库内容覆盖子树目录

  • 若不需要保留仓库A中子树B的本地修改,可直接用仓库B的最新内容覆盖:
    git checkout repoB/develop -- repoB/
    
  • 执行后,仓库A的repoB目录会完全同步仓库B的develop分支内容,随后提交变更即可:
    git add repoB/
    git commit -m "同步仓库B develop分支内容,覆盖本地子树修改"
    

关键说明

  • 若之前使用--squash添加子树,后续拉取建议保持一致,避免提交历史混乱。
  • --strategy-option theirs(简写-X theirs)需正确传递给git subtree pull,参数位置要放在命令末尾,确保Git识别合并策略。
  • 三路合并依赖共同祖先提交,git subtree默认会处理子树的祖先追踪,只要远程仓库和本地子树的历史关联正确,就能触发三路合并。

内容的提问来源于stack exchange,提问作者Linh Nguyễn Văn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:25:06