Git如何回滚一个rebase

时间:2016-12-08 22:08:45

标签: git

在Git中,如果你对它不满意,你如何回滚一个rebase?

Git没有针对rebase的干运行。如果我做了一个rebase并且尚未推送它,我如何回滚到之前,好像它从未发生过?

2 个答案:

答案 0 :(得分:115)

你可以使用reflog在rebase开始之前找到第一个动作然后重置 - 硬回到它。 e.g。

$ git reflog

b710729 HEAD@{0}: rebase: some commit
5ad7c1c HEAD@{1}: rebase: another commit
deafcbf HEAD@{2}: checkout: moving from master to my-branch
...

$ git reset HEAD@{2} --hard

现在你应该在rebase开始之前回来。

要找到要重置的正确位置,您只需选择最接近顶部的条目以“rebase”开头。

替代方法

如果rebase是你在分支上完成的唯一的东西,即你没有未提交的提交/更改 - 那么你可以用git branch -D删除本地分支,然后检查它再次出现:

$ git checkout my-branch
$ git rebase master
// not happy with result
$ git checkout master
$ git branch -D my-branch
$ git checkout my-branch

或者为了同样的效果,你可以重置--hard到原始分支:

$ git reset --hard origin/my-branch

如果您在进行其他未提交的提交时执行了此操作,那么您将丢失它们。在这种情况下,只需使用上面的reflog方法跳转到您进行提交的reflog条目。

答案 1 :(得分:14)

重新设置基准将旧状态保留为ORIG_HEAD,因此您可以通过运行以下命令来还原最后一个重新设置的基准:

git reset --hard ORIG_HEAD