交互式rebase而不改变分支点?

时间:2012-03-28 09:45:54

标签: git rebase git-rebase

我想做类似于标准交互式rebase所做的事情,但我想用它来清理我的分支的历史记录而从另一个分支中获取任何更新。所以,我想保持“分支点”不变。例如,如果我的分支是B1:

--O--O--O--O--O--O------O--O----O--O   master
      \
       O---O--x--x--x--O--O--x--x--O   B1

在上图中,O是一个干净的提交,x是一个混乱的提交,我想用它之前的那些压缩,并可能更改提交消息。在master上使用正常的交互式rebase我可以得到这个:

--O--O--O--O--O--O------O--O----O--O                        master
                                    \
                                     O---O--X--O--O--X--O   B1

其中X是凌乱的提交压缩与清理提交消息。但我怎样才能得到以下内容?

--O--O--O--O--O--O------O--O----O--O   master
      \
       O---O--X--O--O--X--O            B1

2 个答案:

答案 0 :(得分:3)

您可以对任何提交进行rebase,而不仅仅是master的{​​{1}}。假设您的HEAD分支点是B1,那么您可以使用

以交互方式为该提交重新定位12345
B1

然后清理历史。

有关更多提示,请参阅# make sure you are on B1 $ git checkout B1 $ git rebase -i 12345

答案 1 :(得分:0)

'git rebase'文档完全符合您的情况:

  

也可以使用rebase删除一系列提交。如果我们有          以下情况:

           E---F---G---H---I---J  topicA

   then the command

       git rebase --onto topicA~5 topicA~3 topicA

   would result in the removal of commits F and G:

           E---H'---I'---J'  topicA

   This is useful if F and G were flawed in some way, or should not be
   part of topicA. Note that the argument to --onto and the <upstream>
   parameter can be any valid commit-ish.