如何撤消git pull?

问题描述 投票:212回答:5

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

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

git undo pull
5个回答
354
投票

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

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的最后一个值)


60
投票

git reflog show应该向您展示HEAD的历史。你可以用它来弄清楚你在pull之前的位置。然后你可以reset你的HEAD到那个提交。


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了解更多。


15
投票

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


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会让你回到原来的位置,但它会丢弃你不想要的本地更改。 git reset --merge保留您当地的变化。

另见https://stackoverflow.com/a/30345382/621690

© www.soinside.com 2019 - 2024. All rights reserved.