git从子树更新新回购协议

git从子树更新新回购协议,git,Git,我的处境很棘手。涉及到两个存储库,我们称之为monolith和module模块是基于模板在Github中创建的,因此已经包含提交。我从monolith中拆分出一个子目录,并与新回购协议合并,如下所示: monolith> git subtree split --prefix module --branch module-only monolith> git push ../module module-only:module-only monolith> cd ../module

我的处境很棘手。涉及到两个存储库,我们称之为
monolith
module
<代码>模块是基于模板在Github中创建的,因此已经包含提交。我从monolith中拆分出一个子目录,并与新回购协议合并,如下所示:

monolith> git subtree split --prefix module --branch module-only
monolith> git push ../module module-only:module-only
monolith> cd ../module
module> git merge module-only --allow-unrelated-histories # Remember, the template commits?
此后,我在
模块
上做了一些工作,添加了一些提交。我了解到工作也发生在模块子目录中的
monolith
。我被要求用
monolith
的最新更改更新
模块
repo

如何更新子树?


我在回答我自己的问题,因为我在写完这篇文章之前就已经明白了。如果你有更好的答案,我很乐意给你打绿色的复选标记。

这可能不是最好的解决方案,但这就是我最后要做的:

monolith> git branch -D module-only # I couldn't seem to update the subtree...
monolith> git subtree split --prefix module --branch module-only # So just recreate it

# These steps are the same as before
monolith> git push ../module module-only:module-only
monolith> cd ../module
module> git merge module-only
请注意,git选项
--前缀
--分支
可以分别更改为短选项
-p
-b
。为了清楚起见,我在回答中使用了长选项。我加上这张便条是因为我一直回到我自己的答案来记住那些旗帜。。。哈哈


不起作用的事情

我尝试通过各种组合的
git子树pull
更新子树分支失败

我尝试直接从仅模块分支进行更新:

module> git pull ../monolith module-only:master
但这被拒绝,因为它是
非快进的
。因此,我首先尝试将更改合并到子树中:

monolith> git checkout module-only
monolith:subtree> git pull ../module master:module-only
这也是因为
非快进
而被拒绝的。我猜是在前面还是后面

我的重设基础尝试是一场噩梦