如何在压缩和合并后重新整合主题分支?
How to reintegrate topic branches after a squash and merge?
我通常完全接受 git 中的合并,但我最近开始处理一个存储库,其中将主题分支合并到 master 中的策略是将它们压缩成一个提交。
我刚刚发现,在尝试重新整合基于第一个主题分支的第二个主题分支时,这会导致完全混乱。
假设我有:
A-I' master
\
B-C-E-G-I topicA
\ \
D-F-H-J topicB
其中 I'
是从 topicA
到 master
的压缩合并。
如果我将 master
合并到 topicB
那么就会有很多冲突。使用合并工具是无用的,因为 LOCAL 将包含来自 ABCDEFGHJ
的更改,REMOTE 将是 ABCEGI
,而 BASE 将是 A
。尝试查看 I
与 DFHJ
之间的差异可能真的很困难。如果我放弃合并工具,只区分本地和远程,那么变化会更加明显,但我必须手动解决所有冲突。
如果我在 master
上变基 topicB
那么它会变得更加奇怪,因为各种文件在 topicA
上的 B
和 I
之间发生了变化,因此重新应用提交ABCDFJ
到 I'
会产生废话。
如何让 I'
变成 topicB
?
是否有更好的方法来集成主题分支,以便将来避免这种情况?
小恶原来是:
git rebase --onto origin/master topicA topicB
我没有太注意应用了哪些提交,但我猜合并提交 (H
) 丢失了。
至于避免这种情况,如果主题分支要被挤压合并,那么合并主题分支似乎是自找麻烦,因为这实际上是在重写上游分支的历史,众所周知这是个坏主意.
我很想听听其他人是如何解决这个问题的,因为围绕合并的 FUD 似乎人们倾向于将变基作为 "simpler" 工作流程。
另一个我发现非常有用的变体是:
git rebase -i -r --onto origin/master topicA topicB
这将启动一个交互式变基并向您显示在哪些分支上进行了提交。这使得删除在 topicA
上所做的任何提交变得非常容易。如果没有这个,这些提交将被重播到 master
上,这可能会导致各种冲突,因为这些更改已经存在。
我通常完全接受 git 中的合并,但我最近开始处理一个存储库,其中将主题分支合并到 master 中的策略是将它们压缩成一个提交。
我刚刚发现,在尝试重新整合基于第一个主题分支的第二个主题分支时,这会导致完全混乱。
假设我有:
A-I' master
\
B-C-E-G-I topicA
\ \
D-F-H-J topicB
其中 I'
是从 topicA
到 master
的压缩合并。
如果我将 master
合并到 topicB
那么就会有很多冲突。使用合并工具是无用的,因为 LOCAL 将包含来自 ABCDEFGHJ
的更改,REMOTE 将是 ABCEGI
,而 BASE 将是 A
。尝试查看 I
与 DFHJ
之间的差异可能真的很困难。如果我放弃合并工具,只区分本地和远程,那么变化会更加明显,但我必须手动解决所有冲突。
如果我在 master
上变基 topicB
那么它会变得更加奇怪,因为各种文件在 topicA
上的 B
和 I
之间发生了变化,因此重新应用提交ABCDFJ
到 I'
会产生废话。
如何让 I'
变成 topicB
?
是否有更好的方法来集成主题分支,以便将来避免这种情况?
小恶原来是:
git rebase --onto origin/master topicA topicB
我没有太注意应用了哪些提交,但我猜合并提交 (H
) 丢失了。
至于避免这种情况,如果主题分支要被挤压合并,那么合并主题分支似乎是自找麻烦,因为这实际上是在重写上游分支的历史,众所周知这是个坏主意.
我很想听听其他人是如何解决这个问题的,因为围绕合并的 FUD 似乎人们倾向于将变基作为 "simpler" 工作流程。
另一个我发现非常有用的变体是:
git rebase -i -r --onto origin/master topicA topicB
这将启动一个交互式变基并向您显示在哪些分支上进行了提交。这使得删除在 topicA
上所做的任何提交变得非常容易。如果没有这个,这些提交将被重播到 master
上,这可能会导致各种冲突,因为这些更改已经存在。