如何向后变基,最好不使用 diff/apply?

Dan*_*aro 4 git rebase

我有以下提交历史记录:

(master)              (topic)   (quickfix)
       a -> b -> c ->       d ->         e
Run Code Online (Sandbox Code Playgroud)

我想修改它,使其看起来像这样:

     (master, quickfix)              (topic)   
a ->                  e -> b -> c ->       d
Run Code Online (Sandbox Code Playgroud)

换句话说,master正在提交a。我开始在一个topic分支上工作,但在该分支上我发现了一个问题并修复了不相关的代码。我在一个quickfix分支中执行此操作,但该分支来自topic而不是master. 我想合并quickfixmaster,但不进行任何在 中所做的更改topic

我知道我可以使用 diff/apply 来最终到达我想去的地方,但是这种情况在我身上发生过几次,我发现 diff/apply 工作流程有点麻烦。git 中是否有一个功能可以让这变得更容易?

Dan*_*aro 5

没有一个命令可以做到这一点,但一个相对简单的序列可以做到这一点,在分支上工作时运行master

# make it so that it's as if quickfix were branched off of master instead
# of topic
git rebase --onto master topic quickfix

# proceed as normal
git merge quickfix
git rebase master topic
Run Code Online (Sandbox Code Playgroud)

我一开始不理解这一点的原因是我不知道 的--onto选项git rebase。我在阅读时发现了这一点git help rebase,其中有一个足够相似的例子。