繁体   English   中英

在Git中合并重组分支的影响

[英]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)

当我真正想要的是Dorigin/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-branchother-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/masterother-project/master -在后者中保留D ,但是前者缺席吗?)

由于git具有不变的历史记录图,因此当您进行基础调整时,只需在不同基础之上重新创建相同的提交即可。 因此,如果您有历史ABCDE ,则将ED改成C您将得到ABC-E' 如果您合并它,它将在历史记录EE'都具有提交。

因此,可以这样做,但是我觉得您正在尝试将版本控制系统用作依赖项管理系统,这并不是最好的选择。 尝试重新考虑如何使用组件并将它们分成独立的项目。

听起来您已经找到了可以作为库生成的项目子集。 您应该使用完全独立的存储库维护独立的项目(阅读:彼此之间没有设置远程对象)。 定期发布您的库项目以供其他项目使用。 您可以使用gradle或maven之类的工具来帮助您管理对库项目的依赖。 就个人而言,我认为这比尝试通过合并提交将git用作依赖项管理工具更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM