我在我的功能分支中做了一堆未经提交的提交,现在想要重新排序并部分压缩属于提交的视觉效果。我认为解决方案在某种程度上取决于Git交互式,但是如何调用它?
$ git rebase --interactive --onto <the-ID-of-the-first-commit-to-rewrite>
只需用
弹出VInoop
内容后跟注释信息。退出后,我的头重置为指定的提交。
如何正确触发交互式rebase以修改自某次提交以来的提交?
答案 0 :(得分:19)
你应该使用
git rebase --interactive <sha1>
其中<sha1>
应该不是你要重写的第一个提交的sha,而是之前提交的sha。
如果您的历史记录如下:
pick 43576ef last commit
...
pick 5116d42 first commit to rewrite
pick cb85072 last good commit
那么您可以通过不同的方式指示要进行rebase的提交:
git rebase -i cb85072
git rebase -i 5116d42^
其中
^
表示之前的提交。-i
只是--interactive
答案 1 :(得分:13)
您也可以通过一些提交退回上一次提交。例如,如果要重新设置最近5次提交,可以使用以下命令:
git rebase -i HEAD~5
。
答案 2 :(得分:2)
要查看并重写最近的n
个提交,请使用:
git rebase -i HEAD~n
p,选择=使用提交
f,fixup =类似于“ squash”,但丢弃此提交的日志消息
https://www.freecodecamp.org/forum/t/how-to-squash-multiple-commits-into-one-with-git-squash/13231
答案 3 :(得分:2)
如果您希望使用分支B的最后N次提交以交互方式将其分支到分支A,则通常可以这样做:
git rebase -i --onto A B~N B
例如
git rebase -i --onto master feature~3 feature
在没有-i
的情况下,也可以非交互式地很好地工作。
答案 4 :(得分:1)
我在你的指示中错过了RuntimeException
行动:
rebase
答案 5 :(得分:0)
接受的答案是正确的
git rebase -i HEAD~[N] // N is the number of commits, starting from the most recent one
git rebase -i HEAD~[7]
但是如果您有大量的壁球
git rebase -i [commit-id] // [commit-id] is the hash of the commit just before the first one
git rebase -i 6394dc