[英]Effects of merging a rebased branch in Git
背景
我想从我的Git仓库中追溯创建一个子项目。
目前,我有这样的事情...
A-B-C (origin/master)
我现在看到该代码库的一个子集对于其他一些类似的项目很有用,所以我分叉并删除了很多东西。
A-B-C-D (sub-project/master)
其中,提交D
删除一堆特定于original/master
项目的代码。
现在,我可以从sub-project/master
创建其他项目...
A-B-C-D-OP1 (other-project/master)
而且,如果我有通用更新(承诺要应用到所有其他项目),则可以将它们设置为sub-project/master
,然后将其放入所有其他项目中...
A-B-C-D-E (sub-project/master)
A-B-C-D-OP1-E (other-project/master)
我现在想做的是将来自sub-project/master
相同提交合并回origin/master
,但是我知道这将导致...
A-B-C-D-E (origin/master)
当我真正想要的是D
从origin/master
删除了一堆代码...
A-B-C-E (origin/master)
我的问题
如果我将sub-project/master
变基,则删除提交D
A-B-C-E (sub-project/rebase-branch)
我知道我可以将sub-project/rebase-branch
合并到original/master
这样它也看起来就像我想要的那样...
A-B-C-E (origin/master)
但是如果我随后在sub-project
上创建其他提交,将会发生什么情况……
A-B-C-E-F (sub-project/rebase-branch)
然后合并sub-project/rebase-branch
到other-project/master
?
other-project/master
导致这种情况吗?
A-B-C-D-OP1-E-F (other-project/master)
离开D
的地方吗?
还是合并会导致...?
A-B-C-OP1-E-F (other-project/master)
添加F
时删除D
?
如果是前者,那我很好。 如果是后者,那么是否有可行的解决方案来解决我在上面概述的难题? (是否有可能以这样一种方式修改sub-project
,使我可以将添加到sub-project
其他提交合并到origin/master
和other-project/master
-在后者中保留D
,但是前者缺席吗?)
由于git具有不变的历史记录图,因此当您进行基础调整时,只需在不同基础之上重新创建相同的提交即可。 因此,如果您有历史ABCDE
,则将E
从D
改成C
您将得到ABC-E'
。 如果您合并它,它将在历史记录E
和E'
都具有提交。
因此,可以这样做,但是我觉得您正在尝试将版本控制系统用作依赖项管理系统,这并不是最好的选择。 尝试重新考虑如何使用组件并将它们分成独立的项目。
听起来您已经找到了可以作为库生成的项目子集。 您应该使用完全独立的存储库维护独立的项目(阅读:彼此之间没有设置远程对象)。 定期发布您的库项目以供其他项目使用。 您可以使用gradle或maven之类的工具来帮助您管理对库项目的依赖。 就个人而言,我认为这比尝试通过合并提交将git用作依赖项管理工具更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.