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

Git subtree出现段错误,提交同步失败求助

解决git subtree split段错误及同步无提交问题

问题根源

添加--rejoin选项后生成的合并提交,导致subtree的历史关联逻辑复杂化,git-subtree脚本处理这些合并提交时出现异常,引发段错误,同时无法正确识别需要同步的提交内容。

解决步骤

1. 在bundle仓库生成干净的子项目历史

首先找到添加--rejoin之前最后一次正常同步的提交哈希(记为OLD_SYNC_COMMIT),可通过git log --grep="subtree.*projA"筛选历史同步提交定位。

基于该提交重新生成无异常的子项目分支:

cd src/large-repo
git subtree split -P projA -b clean-projA-split --onto OLD_SYNC_COMMIT

2. 修复独立仓库的历史

进入独立仓库,将干净的分支内容覆盖到目标分支:

cd ../subtree/projA
git fetch ../large-repo clean-projA-split
git checkout main_ST
git reset --hard FETCH_HEAD
git push -f origin main_ST

注意:强制推送会覆盖独立仓库现有历史,操作前务必备份。

3. 重建bundle仓库与独立仓库的subtree关联

回到bundle仓库,清理临时分支并重新建立关联:

cd ../large-repo
git branch -D clean-projA-split
git subtree pull --rejoin -P projA ../subtree/projA main_ST

4. 后续同步的标准流程

之后同步时,需在push和pull时均使用--rejoin,确保历史关联正确且同步高效:

cd src/large-repo
git subtree push --rejoin -P projA ../subtree/projA main_ST
git subtree pull --rejoin -P projA ../subtree/projA main_ST
git push

注意事项

  • 所有操作前请备份bundle仓库和独立仓库,防止数据丢失
  • 若段错误仍出现,可尝试升级git版本(部分旧版本git-subtree存在已知bug)
  • 避免在subtree同步过程中混用--squash和--rejoin,保持同步逻辑一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:37:30