我想做类似于标准交互式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
答案 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.