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

如何正确提交/推送Git subtree子仓库的代码变更?

Git Subtree 代码变更提交/推送完整流程

当你修改了嵌入主仓库的Protocol subtree代码后,需要分两步完成变更同步:先提交到主仓库本地,再推送到独立的Protocol仓库,具体命令序列如下:

  1. 将subtree目录的变更加入暂存区
    把修改后的Protocol目录下所有变更加入Git暂存区:

    git add my/folder
    

    (my/folder是你嵌入subtree的实际路径,替换成自己的目录名)

  2. 提交变更到主仓库本地分支
    像常规提交一样,把变更提交到主仓库的本地历史:

    git commit -m "更新Protocol:新增XX接口字段"
    

    若只想单独提交subtree的变更,可使用:git commit my/folder -m "仅更新Protocol"。

  3. 将subtree变更推送到独立的Protocol仓库
    最后把subtree的变更同步到远程的Protocol仓库,确保另一端仓库能拉取到:

    git subtree push --prefix=my/folder subtree_origin master
    

    注意:subtree_origin是你之前为Protocol仓库添加的远程别名,若未添加,先执行git remote add subtree_origin <Protocol仓库的Git地址>。

另一端仓库要拉取更新的Protocol,执行:

git subtree pull --prefix=my/folder subtree_origin master
主仓库(非Subtree部分)的操作

主仓库中非subtree的代码变更,完全按照常规Git流程操作即可:

  • git add <非subtree文件/目录>
  • git commit -m "修改主仓库XX功能"
  • git push origin <主仓库分支名>
    这些操作和subtree的提交、推送互不干扰,subtree的提交只是主仓库历史的一部分,不会影响主仓库本身的远程同步。
其他替代方案

除了subtree,还有几种常见的跨仓库共享代码的方式,各有优劣:

  • Git Submodule:在主仓库中保存Protocol仓库的特定commit引用,子模块是独立仓库。优点是子模块版本完全独立,缺点是克隆、切换分支时需要额外执行git submodule init、git submodule update,新手容易出现子模块版本不一致的问题。
  • Monorepo:把两端硬件代码和Protocol放在同一个Git仓库中,用目录划分不同模块。优点是无需跨仓库同步,代码关联修改更方便,缺点是仓库体积会随着代码量增长变大,适合团队规模较小、代码关联性强的场景。
  • 独立发布Protocol为依赖库:将Protocol打包成可分发的依赖包(比如C/C++的静态库/头文件、Python的PyPI包、Go的Module),两端仓库通过包管理工具引入依赖。优点是版本管理清晰,无需Git子系统操作,缺点是需要维护包的发布流程,适合Protocol相对稳定、有版本迭代需求的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:10:32