如何撤消git pull?

时间:2011-04-28 07:57:40

标签: git undo pull

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

在我对远程原点进行git pull之前,我怎样才能回到状态?

8 个答案:

答案 0 :(得分:348)

或者使其比其他答案更明确:

git pull 

哎呦?

git reset --keep HEAD@{1}

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


To the commenter

  

ORIG_HEAD是HEAD的先前状态,由具有可能危险行为的命令设置,以便于还原它们。现在Git有reflog它没那么有用了:HEAD @ {1}大致相当于ORIG_HEAD(HEAD @ {1}总是HEAD的最后一个值,ORIG_HEAD是危险操作前HEAD的最后一个值)

答案 1 :(得分:59)

git reflog show应该向您展示HEAD的历史。您可以使用它来确定pull之前的位置。然后,您可以reset HEAD进行该提交。

答案 2 :(得分:23)

这对我有用。

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)

结帐:HEAD and ORIG_HEAD in Git了解更多信息。

答案 3 :(得分:15)

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

答案 4 :(得分:1)

撤销git pull

git reset --hard HEAD^

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

清理它们
  git clean -fd

答案 5 :(得分:0)

来自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保持   您的本地更改。

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

答案 6 :(得分:0)

即使上述解决方案都能奏效,但如果您想倒转时钟而不是撤消git pull,此答案将为您提供。我的意思是,如果您想像{{1}分钟后再运行命令

X

注意:在继续执行此命令之前,请仅在确定要返回的时间以及有关我的处境的前提下尝试此命令。

我目前在分支机构git reset --hard branchName@{"X Minutes ago"}上,应该结帐到新分支并拉入另一个分支,说分支机构develop,但我不小心跑了 A,然后退房。

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

git pull origin B

如果您在Windows cmd上并获得error: unknown switch `e

尝试添加这样的报价

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

答案 7 :(得分:0)

重置主分支:

git reset --hard origin/master