git:将合并之前的提交移动

8

我的历史记录树目前看起来是这样的: enter image description here

我想要将提交b3应用到主分支上。当然,我可以再次将feature分支合并到master分支,但历史记录会变得混乱,有两个合并提交(a6a4现在已经没有用了): enter image description here


因此,我想知道的是如何使a4现在指向b3而不是b2 enter image description here 我知道SHA1将不同,因此提交将被重命名为a4'a5'


2
从主分支执行 git rebase -p b3 命令。这样可以保留合并,但将其移动到 b3 之后。 - poke
@poke 谢谢!我需要处于a4状态才能这样做吗?还是在a5状态下也可以工作? - ebosi
它应该在其中任何一个上运行。 - poke
1个回答

4

从主分支,您可以使用--preserve-merges选项(或缩写为-p)来保留合并的情况,直接将其变基在新的b3上:

git rebase -p feature

这样,当Git进行变基操作时,它将不会尝试将合并操作压缩为单个提交,而是在新的基础提交上重新创建该合并操作。因此,您的历史记录将如下所示:

                               master
                                 
a1 -- a2 -- a3 --------- a4' -- a5'
        \                /
         \              /
          b1 -- b2 -- b3
                      
                   feature

相对于不使用--preserve-merges标志的情况,有以下区别:

                                      master
                                        
a1 -- a2                 a3' -- a4' -- a5'
        \                /
         \              /
          b1 -- b2 -- b3
                      
                   feature

OP应该(而且我看到已经)注意到结果是一个新的(不同的)合并,具有不同的哈希和不同的树。正如你所说,rebase重新创建(即创建一个新的)合并来替代旧的合并。无论如何,点赞。 :-) - torek
1
@torek 是的,我使用 x' 表示这是基于原始 x 重新创建的提交 :) - poke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接