如何推送到git子树?

时间:2017-02-03 14:36:54

标签: git git-subtree subtree

我在git上添加了一个似乎正在工作的子树。我进入目录并进行了一些更改然后推送。

我注意到这些更改显示在父项目中,但我用作源的存储库尚未更新。

我尝试git subtree push返回:

  

您必须提供--prefix选项。

同样git subtree push --prefix=my/folder git@mygitrepo.com返回:

  

您必须提供<repository> <ref>

将更改推送到我的git子树的原始仓库的正确方法是什么?

编辑:有人建议我这样做:

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

当我运行上述操作时,它会启动该过程,但最终会说分支落后了。所以我跑:

git subtree pull --prefix=my/folder origin master

返回&#34;已经是最新的&#34;

2 个答案:

答案 0 :(得分:6)

所以,通过@PhilipKirkbride的一些共同努力,我们设法弄清楚:

您需要将所有详细信息放在命令中:

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

其中master是子树中的分支,subtree_origin只是另一个远程,恰好指向子树的git存储库。您也可以输入完整的repo URL。

答案 1 :(得分:0)

在 Git 2.32(2021 年第二季度)中,Dan 的 2017 answer 可以应用于任何提交,而不仅仅是 HEAD。

commit 9a3e3cacommit 49470cdcommit 94389e7commit cb65514commit 6468784commit e9525a8commit 534ff90、{{3} }, commit 5cdae0f, commit cbb5de8, commit e4f8baa, commit bbffb02, commit 22d5507, commit a94f911, commit e2b11e4, commit 6d43585, commit f664304commit 8dc3240commit d2f0f81commit 5a35697commit b04538dcommit b269976commit db6952bcommit f1cd2d9、{{ 3}}、commit 63ac4f1commit c4566abcommit 40b1e1ecommit f700406commit f2bb7fe(2021 年 4 月 27 日)由 commit 914d512.
(2021 年 5 月 10 日于 commit 4c996deLuke Shumaker (LukeShu) 合并)

<块引用>

Junio C Hamano -- gitster --: push: 允许指定 HEAD 以外的本地版本

签字人:Luke Shumaker

<块引用>

git subtree split 允许您指定 HEAD 以外的 rev。
'commit 44ccb76'(subtree) 允许您指定本地事物和远程引用之间的映射。

因此将它们粉碎在一起,并让 git subtree push 允许您指定要在哪个本地运行拆分并将拆分的结果推送到远程引用。

git push 现在包括:

<块引用>

push <repository> [+][<local-commit>:]<remote-ref>

使用 <local-commit> 的子树进行“拆分”,然后进行“git push”以将结果推送到 <repository><remote-ref>

这可用于将您的子树推送到远程存储库的不同分支。
与 'split' 一样,如果没有给出 <local-commit>,则使用 HEAD。
可选的前导“+”被忽略。

这意味着这会起作用:

git subtree push --prefix="sub dir" --annotate="*" ./"sub proj" HEAD^:from-mainline
                                                                ^^^^^^
相关问题