是' git reset - hard Head~1'足以撤消git pull?

时间:2015-07-29 12:59:22

标签: git

我是一个git新手,我试图理解撤消git的变化。说我有两个分支

1:主人 2:工作

我在工作分公司工作,我想从工作分支中的队友那里获取最新的更改,所以我应该发出命令

git pull origin work

但相反,我发出了命令

 git pull origin master

它从master branch获取了一堆提交。现在,我想撤消最后一次提取(假设没有本地uncommited更改),这个命令是否足够

git reset --hard HEAD~1

上面的命令会完成撤消git pull吗?是否存在可能无效的情况?

修改

读完答案后,Do HEAD~1和ORIG-HEAD在拉/合并后引用相同的提交?

2 个答案:

答案 0 :(得分:3)

首先,git reset不选择--head选项,我认为您的意思是--hard。第二,不,这还不够,因为git reset --head HEAD~1会将您的存储库带到上一次提交的状态。如果git pull导致许多新提交,那么这还不够。你需要这样做:

$ git reset --hard ORIG_HEAD

它的工作原理是因为在进行合并之前,rebase和其他有潜在危险的操作Git在此操作之前设置一个名为ORIG_HEAD的特殊引用,等于当前HEAD的SHA1。下次在git pull注意当前SHA1的{​​{1}}之前和HEAD之后看到git pull指出之前的ORIG_HEAD

HEAD

答案 1 :(得分:1)

我建议您使用git guigitk查看历史记录并进行重置。

但是如果你想使用终端:

在拉动之前看看HEAD的位置

git reflog

你应该看到HEAD先前位置的SHA1。

然后(正如肯尼所建议的那样):

git reset --hard <previousSHA1>

或:

git branch -f master <previousSHA1>