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

标签 git

我是一个 git 新手,我正在尝试了解如何撤消 git 中的更改。假设我有两个分支

1:大师
2: 工作

我在工作分支工作,我想从工作分支的队友那里 pull 最新的更改,所以我应该下达命令

git pull origin work

相反,我给出了命令

 git pull origin master

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

git reset --hard HEAD~1

上面的命令能完成撤销 git pull 吗?是否存在可能无法正常工作的情况?

编辑

阅读答案后,HEAD~1 和 ORIG-HEAD 在 pull/merge 后是否引用同一个提交?

最佳答案

首先,git reset 没有使用--head 选项,我想你的意思是--hard。其次,不,这还不够,因为 git reset --head HEAD~1 会将您的存储库恢复到上次提交的状态。如果 git pull 导致许多新的提交,这还不够。你需要做的:

$ git reset --hard ORIG_HEAD

之所以有效,是因为在执行 merge 、 rebase 和其他潜在危险操作之前,Git 设置了一个名为 ORIG_HEAD 的特殊引用,它等于当前的 SHA1 HEAD 在此操作之前。下次在执行 git pull 之前注意当前 HEADSHA1 并在 git pull 之后看到你自己 ORIG_HEAD 指向前一个HEAD:

$  cat .git/ORIG_HEAD

关于git - 'git reset --hard Head~1' 是否足以撤消 git pull?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31701130/

相关文章:

git: checkout 一个标签,修改一些东西,然后再次标记它

git - OpenShift action_hooks 不可执行

PHP Composer 与 Git 子模块和 Symfony2 混合

git - AWS Codebuild - 仅当提交消息包含字符串时才继续构建

git - 如何在现有 Perl 项目中应用/使用 Perl::Tidy?

git - 无法从 Gitlab : Permission denied, 克隆存储库,请重试

git - 如何覆盖本地git存储库中的标签?

git 错误 - 无法推送到 github - 包对象死于信号 9

ruby-on-rails - 为什么我的 Git Bash 不能访问 "bundle"?

.net - git中的web.config和app.config机器特定设置