如何执行“反向”的`git rebase <some-branch>`操作?

5
在下面的历史记录中,假设提交BE与提交FI完全独立。
                       br-1            master
  ⋯ ---A---B---C---D---E---F---G---H---I

如何得到这样的历史记录:
                       master
  ⋯ ---A---F'--G'--H'--I'
        \
         `-B---C---D---E
                       br-1
br-1master是指分支。 F'中的prime表示提交F'包含与提交F相同的更改。 G'H'I'同理。

(所需操作实际上是从上面显示的第二个历史记录开始执行git rebase br-1的反操作。)


这并不是真正的反向变基。它只是一个变基。 - Chris
1
@Chris:你在技术上是正确的,但问题标题对于Git初学者来说是完美选择,因为通常的操作是将一个分支放在另一个分支的顶部 - 而这是相反的操作:将该部分放回到分支的根部。 - Sven
2
@Chris:在我看来,git 的术语/命名方式非常混乱,争论什么是“真正的”已经没有意义了。例如,git 中的“分支”在 git 之外的任何场景中都不是分支。或者说,在“交互式变基”中,人们可以做一些在 git 之外从未被描述为“变基”的事情。这个疯狂的“仅限于 git”的术语列表可以继续下去。(顺便说一句,这就是我认为学习 git 如此困难的原因之一,每当我看到 SO 在其右侧栏中投放的“相关”git问题的疯狂投票数时,我就会想起这一点。) - kjo
2个回答

7
两个选项。
1)
git checkout master
git rebase --interactive A

删除B到E行之间的内容

2)

git checkout master
git rebase --onto A E

我想明确地感谢您的回答(因为我最终接受了第一个出现的答案)。特别是,我发现您的第一个选项很有启发性。现在我意识到这是我自己本应该能够想到的选项(并且希望我能想到)。 - kjo

3

当检出 master 分支时:

git rebase --onto A br-1 master

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