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
这也是因为非快进
而被拒绝的。我猜是在前面还是后面
我的重设基础尝试是一场噩梦