撤消git重置?

什么是最简单的方法来撤消

git reset HEAD~

命令? 目前,我能想到的唯一方法就是从远程回购站点执行“git clone http:// ...”。


简短的回答:

git reset 'HEAD@{1}'

长答案:

Git保存所有ref更新的日志(例如checkout,reset,commit,merge)。 您可以通过输入以下内容查看它

git reflog

这个列表中的某处是你失去的提交。 假设你只是输入git reset HEAD~并且想撤消它。 我的reflog看起来像这样:

$ git reflog
3f6db14 HEAD@{0}: HEAD~: updating HEAD
d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
[...]

第一行说前面的HEAD 0位置(换句话说,当前位置)是3f6db14; 它是通过重新设置为HEAD~获得的。 第二行表示, HEAD 1位置前(换言之,复位之前的状态)是d27924e。 它是通过检查一个特定的提交获得的(尽管现在这不重要)。 因此,要撤消重置,请运行git reset HEAD@{1} (或git reset d27924e )。

另一方面,如果你从那以后运行了一些其他的命令来更新HEAD,那么你想要的提交将不在列表的顶部,你需要搜索reflog

最后一个注意事项:查看您想要重置的特定分支的reflog可能会更容易一些,比如master,而不是HEAD

$ git reflog show master
c24138b master@{0}: merge origin/master: Fast-forward
90a2bf9 master@{1}: merge origin/master: Fast-forward
[...]

这应该比一般的HEAD reflog有更少的噪音。


老问题,和张贴的答案很好。 尽管如此,我还是会选择另一个选项。

git reset ORIG_HEAD

ORIG_HEAD引用HEAD先前引用的提交。


我的情况稍有不同,我做了git reset HEAD~三次。

要解开它,我必须这样做

git reset HEAD@{3}

所以你应该能够做到

git reset HEAD@{N}

但是,如果你已经完成使用git reset

git reset HEAD~3

你需要这样做

git reset HEAD@{1}

由于{N}表示Reflog中的操作次数。 正如Mark在评论中指出的那样。

链接地址: http://www.djcxy.com/p/23621.html

上一篇: Undoing git reset?

下一篇: What's the difference between git reset