在 Git 中,如果对 rebase 不满意,如何回滚它?
Git 没有对 rebase 的演练。如果我做了一个 rebase 并且还没有推它,我如何回滚到之前,就好像它从来没有发生过?
您可以使用 重新测试来查找 rebase 开始之前的第一个操作,然后重新设置——很难回到它。例如:。
$ 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”开始的顶部的条目。
更新: 正如在评论和其他答案中提到的,您也可以使用 ORIG_HEAD作为一种更容易的方法来找到在哪里重置到: git reset ORIG_HEAD --hard
ORIG_HEAD
git reset ORIG_HEAD --hard
如果 rebase 是您在分支上执行的 只有一件事,也就是说,您没有未推送的提交/更改——那么您可以使用 git branch -D删除本地分支,然后再次检查它:
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
或者为了达到同样的效果,你可以重置——很难到原点分支:
$ git reset --hard origin/my-branch
如果您在其他未推送的提交期间执行了此操作,那么您将失去它们。在这种情况下,只需使用上面的 reflog 方法就可以跳回到进行提交的 reflog 条目。
Rebase 将旧状态的备份保留为 ORIG_HEAD。 因此,可以通过运行以下命令恢复最后一个 rebase:
git reset --hard ORIG_HEAD