在 Git 中,如果您对变基不满意,如何回滚它?
Git 没有用于变基的预演。如果我做了变基但还没有推送它,我如何回滚到之前,就好像它从未发生过一样?
您可以使用 reflog 查找变基开始之前的第一个操作,然后重置 --hard 回到它。例如
$ 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”开头的条目即可。
更新:正如评论和其他答案中提到的,您还可以使用
ORIG_HEAD
作为查找重置位置的更简单方法:git reset ORIG_HEAD --hard
如果变基是您在分支上所做的唯一的事情,即您没有未推送的提交/更改 - 那么您可以使用
git branch -D
删除本地分支,然后再次检查:
$ git checkout my-branch
$ git rebase master
// not happy with the result
$ git checkout master
$ git branch -D my-branch
$ git checkout my-branch
或者为了达到相同的效果,你可以将 --hard 重置到原始分支:
$ git reset --hard origin/my-branch
如果您在有其他未推送的提交时执行了此操作,那么您将丢失它们。在这种情况下,只需使用上面的引用日志方法即可跳转回您进行提交的引用日志条目。
Rebase 将旧状态的备份保留为
ORIG_HEAD
。git reset --hard ORIG_HEAD