如何撤消git pull?

Kar*_*ins 227 git pull undo

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

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

seh*_*ehe 372

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

git pull 
Run Code Online (Sandbox Code Playgroud)

哎呦?

git reset --keep HEAD@{1}
Run Code Online (Sandbox Code Playgroud)

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


给评论者

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

  • PowerShell用户,用反引号转义括号:``git reset HEAD @` {1`}`` (9认同)
  • @hugemeow这将是一个很好的问题.同时[`man git-rev-parse`](http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html)描述了这一点.`HEAD @ {1}`是[`reflog`]中符号`HEAD`的前一个值(http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html)而`HEAD ^`是当前`HEAD`的(第一个)_parent revision_.这两个需要点头相同(例如在一个rebase,一个硬复位,一个分支开关等等之后).请阅读链接文章以获取reflog.干杯 (5认同)
  • http://ss64.com/ps/syntax-esc.html我认为你想要输入`HEAD @ \`{1 \`}`,或者对于POSIX shell也可以这样做:`'HEAD @ {1}"` (3认同)
  • HEAD @ {1}和HEAD ^有什么区别? (2认同)
  • 我认为它不仅重置拉力,而且我的提交=( (2认同)
  • git reset在这里做的不是正确的事情:它更改了HEAD指向的内容,但没有更改工作树的内容。其他人建议`git checkout`或`git reset --hard`,但这两个都是危险的命令,它们会破坏所有未提交的更改。我建议改用`git reset --keep HEAD @ {1}`:`--keep`指示git保留未提交的更改,但它确实更改了工作树。 (2认同)

Nou*_*him 62

git reflog show应该告诉你HEAD的历史.你可以用它来弄清楚你之前的位置pull.然后你可以resetHEAD该犯.


Par*_*us- 25

这对我有用.

git reset --hard ORIG_HEAD 
Run Code Online (Sandbox Code Playgroud)

撤消合并或拉取:

$ 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)
Run Code Online (Sandbox Code Playgroud)

查看此内容:GIT中的HEAD和ORIG_HEAD了解更多信息.


Nin*_*ina 15

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


R..*_*... 10

撤消git pull

git reset --hard HEAD^
Run Code Online (Sandbox Code Playgroud)

将您的本地存储库恢复到之前的提交状态。(注意:HEAD^ 表示当前分支尖端的第一个直接父级。HEAD^ 是 HEAD^1 的缩写,如果需要,您也可以进一步向上(例如 HEAD^2 、 HEAD^3 ...) .重置后,如果留下一些未知文件(由于原始 git pull 到达的文件),它们将被列为未跟踪文件,您可以使用以下命令清理它们

  git clean -fd
Run Code Online (Sandbox Code Playgroud)


mah*_*mnj 9

尽管上述解决方案确实有效,但如果您想逆转时钟而不是撤消 git pull,则此答案适合您。我的意思是,如果你想以分钟的方式获得确切的仓库,X那么运行这个命令

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"}'