如何撤消'git reset'?

时间:2010-03-24 18:08:29

标签: git

撤消

的最简单方法是什么
git reset HEAD~

命令? 目前,我能想到的唯一方法就是从远程仓库做一个“git clone http:// ...”。

5 个答案:

答案 0 :(得分:1998)

简答:

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,那么您想要的提交将不会位于列表的顶部,并且您需要搜索{{1 }}

最后一点说明:对于您要取消重置的特定分支{,1}可能更容易,比如主人,而不是reflog

reflog

它应该比一般HEAD具有更少的噪音。

答案 1 :(得分:130)

老问题,发布的答案很有效。不过我会选择其他选项。

git reset ORIG_HEAD

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

答案 2 :(得分:39)

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

撤消它我必须做

git reset HEAD@{3}

所以你应该能够做到

git reset HEAD@{N}

但是如果你使用

完成了git reset
git reset HEAD~3

你需要做

git reset HEAD@{1}

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

答案 3 :(得分:12)

1。使用git reflog获取所有引用的更新。

2。git reset <id_of_commit_to_which_you_want_restore>

3下次避免这种情况

答案 4 :(得分:0)

我没有在原点推送重设更改。因此,只需git pull即可将我的本地分支带到最新状态。