git rebase -i HEAD~4
git reset --hard <hash>
git reflog
git log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative
git rebase -i HEAD~4
差别对比:
- 直接以
:q
退出时,得到
Successfully rebased and updated refs/heads/master.
并会在 git reflog
输出中增加
53775be (HEAD -> master) HEAD@{0}: rebase -i (finish): returning to refs/heads/master
53775be (HEAD -> master) HEAD@{1}: rebase -i (start): checkout HEAD~4
- 删除所有未被
#
注释的内容后退出,得到
Nothing to do
不会在 git reflog
输出中增加任何内容;
结论:后一种方式才是推荐使用的正确的 abort 当前 rebase 的方式;
可以看出状态直接回到了未进行 rebase 前;
可以看到能够完成其他 rebase 命令动作;
差别对比:
- 基于 rebase 方式进行 commit 删除,粒度更加细致,能够在删除的过程中同时完成其他调整;
- 基于 reset 方式进行 commit 删除,适用于简单的回退操作;