289

由于远程源上不需要的提交,我想撤消我的 git pull,但我不知道我必须重置回哪个版本。

我怎样才能回到远程源上的 git pull 之前的状态?

4

8 回答 8

455

或者让它比其他答案更明确:

git pull 

哎呀?

git reset --keep HEAD@{1}

早于 1.7.1 的 git 版本没有--keep. 如果你使用这样的版本,你可以使用--hard- 但这是一个危险的操作,因为它会丢失任何本地更改。


给评论者

ORIG_HEAD 是 HEAD 的先前状态,由可能具有危险行为的命令设置,以便于恢复它们。现在 Git 有 reflog 用处不大:HEAD@{1} 大致相当于 ORIG_HEAD(HEAD@{1} 始终是 HEAD 的最后一个值,ORIG_HEAD 是危险操作之前 HEAD 的最后一个值)

于 2011-04-28T08:13:52.427 回答
76

git reflog show应该向您展示 HEAD 的历史。您可以使用它来确定您在pull. 然后你就可以reset提交HEAD了。

于 2011-04-28T08:01:19.640 回答
42

这对我有用。

git reset --hard ORIG_HEAD 

撤消合并或拉取:

$ git pull                         (1)
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard                 (2)
$ git pull . topic/branch          (3)
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD       (4)

查看此:Git 中的 HEAD 和 ORIG_HEAD了解更多信息。

于 2015-09-01T14:37:50.983 回答
18

找到<SHA#>你想要去的提交。您可以在 github 中找到它,git log或者在命令行中输入 或git reflog show然后执行 git reset --hard <SHA#>

于 2015-08-28T16:29:55.647 回答
4

来自https://git-scm.com/docs/git-reset#Documentation/git-reset.txt-Undoamergeorpullinsideadirtyworkingtree

撤消合并或拉入脏工作树

$ git pull           (1)
Auto-merging nitfol
Merge made by recursive.
 nitfol               |   20 +++++----
 ...
$ git reset --merge ORIG_HEAD      (2)

即使您的工作树中可能有本地修改,git pull当您知道另一个分支中的更改不与它们重叠时,您也可以放心地说。

查看合并的结果后,您可能会发现另一个分支中的更改并不令人满意。运行git reset --hard ORIG_HEAD 会让你回到原来的位置,但它会丢弃你不想要的本地更改。git reset --merge保留您的本地更改。

另请参阅https://stackoverflow.com/a/30345382/621690

于 2019-04-07T06:03:51.850 回答
4

撤消git pull

git reset --hard HEAD^

将您的本地仓库带回之前的提交状态。如果由于 git pull 下载了任何新文件,它们将被列为未跟踪文件,您可以使用清理它们

  git clean -fd
于 2021-05-17T18:09:06.873 回答
3

即使上述解决方案确实有效,这个答案也是为你准备的,以防你想倒转时钟而不是撤消 git pull。我的意思是,如果你想以XMins 的方式获得你的确切回购然后运行命令

git reset --hard branchName@{"X Minutes ago"}

注意:在您实际继续运行此命令之前,请仅在您确定要返回的时间以及关于我的情况的情况下尝试此命令。

我目前在一个分支上develop,我应该结帐到一个新的分支并拉入另一个分支,比如说分支,A 但我在结帐前不小心跑 git pull origin A了。

所以要撤消此更改,我尝试了此命令

git reset --hard develop@{"10 Minutes ago"}

如果您在 Windows cmd 上并出现错误:未知开关 `e

尝试添加这样的引号

git reset --hard 'develop@{"10 Minutes ago"}'

于 2020-09-19T09:41:00.203 回答
1

重置主分支:

git reset --hard origin/master
于 2021-02-08T15:27:13.000 回答