我可以用另一个分支的提交替换旧的提交吗?

时间:2019-04-13 09:27:19

标签: git version-control rebase

假设我有一个分支B1,其最后一次提交的提交为C1-> C2-> C3,另一个分支B2的最后一次提交的提交为C4-> C5-> C6。

如何用B2中的提交C4替换B1中的提交C2?

2 个答案:

答案 0 :(得分:2)

您可以使用交互式基准库来做到这一点-但不是不是在B2上将B1基准库。而是:

git rebase -i B1 hash-of-C2^

(代替C2的哈希,您将输入C2的实际哈希,即看起来像ddc18e47147f4f5cb969609150c4d29040b2c07f的十六进制字符串,您可以使用git log看到它)

然后,在编辑器中,您将看到:

pick short-hash-of-C2 commit comment here
pick short-hash-of-C3 commit comment here

(短哈希将是C2完整哈希的前缀,例如ddc18e47

现在,将C2的keep替换为drop,但为C4添加一行,以便您现在拥有:

drop short-hash-of-C2 commit comment here
pick full-hash-of-C4
pick short-hash-of-C3 commit comment here

(请注意,C4的短哈希也应该起作用,但是我只想复制整个哈希,不要将其缩短以防万一。)

就是这样。当然,您可能需要解决由于这些更改而引起的冲突,就像在任何重新设置基准中一样。

答案 1 :(得分:0)

假设这些分支都已发布,则可能需要使用还原/樱桃选择选项:

# on branch B1
git revert C2
git cherry-pick C4

这将使分支B1如下所示:

C1 -- C2 -- C3 -- RC2 -- C4

但在功能上应与以下内容大致相同:

C1 -- C4 -- C3