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是您在分支上所做的唯一操作,即您没有未取消的提交/更改,那么您可以使用
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将旧状态保留为
1 | git reset --hard ORIG_HEAD |