Git如何回滚一个rebase


Git how to rollback a rebase

在Git中,如果不满意如何回滚一个Rebase?

Git没有用于钢筋的干运转。如果我做了一个REBASE,但还没有推它,我该如何回滚到以前,就好像它从未发生过一样?


您可以使用reflog在重新设定基开始之前找到第一个动作,然后重新设定--很难回到它。例如

1
2
3
4
5
6
7
8
$ 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是您在分支上所做的唯一操作,即您没有未取消的提交/更改,那么您可以使用git branch -D删除本地分支,然后再次检查:

1
2
3
4
5
6
$ git checkout my-branch
$ git rebase master
// not happy with result
$ git checkout master
$ git branch -D my-branch
$ git checkout my-branch

或者为了同样的效果,您可以重置——很难重置为原始分支:

1
$ git reset --hard origin/my-branch

如果你这样做,而你有其他未履行的承诺,那么你将失去他们。在这种情况下,只需使用上面的reflog方法返回提交的reflog条目。


rebase将旧状态保留为ORIG_HEAD,因此您可以通过运行以下命令来恢复上一个rebase:

1
git reset --hard ORIG_HEAD