我是一个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在拉/合并后引用相同的提交?
答案 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 gui
和gitk
查看历史记录并进行重置。
但是如果你想使用终端:
在拉动之前看看HEAD的位置
git reflog
你应该看到HEAD先前位置的SHA1。
然后(正如肯尼所建议的那样):
git reset --hard <previousSHA1>
或:
git branch -f master <previousSHA1>