如何撤销一个git拉?

我想撤消我的git拉的帐户上不需要的提交远程原点,但我不知道我必须重置回哪个修订。

我怎么能回到git拉远端原点之前的状态呢?

361279 次浏览

git reflog show应该显示HEAD的历史。你可以用它来找出你在pull之前的位置。然后你可以reset你的HEAD到那个提交。

或者让它比另一个答案更明确:

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

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

这对我很管用。

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以获取更多信息。

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)
< p >即使 您可以在工作树中进行局部修改,这是安全的 当你知道另一个分支的变化发生时,就说git pull

检查合并结果后,您可能会发现更改 在另一个分支是不令人满意的。运行git reset --hard ORIG_HEAD 会让你回到你曾经的地方,但它会丢弃吗 你的局部变化,这是你不想要的。git reset --merge保持

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

即使上面的解决方案确实有效,这个答案是为你,以防你想反转时钟,而不是撤销一个git拉。我的意思是,如果你想以X Mins的方式获得确切的回购,那么运行这个命令

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

注意:在实际执行此命令之前,请仅在确定要返回的时间和我的情况下尝试此命令。

我目前在分支develop上,我应该签出到一个新分支并拉入另一个分支,让我们说分支A,但我不小心运行

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

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

如果你在windows cmd并得到错误:未知开关

试着像这样加引号

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

重置主分支:

git reset --hard origin/master

来撤销git拉

git reset --hard HEAD^

将本地回购恢复到以前的提交状态。 如果git pull的结果是下载了任何新文件,它们将被列为未跟踪文件,您可以使用

清除它们
  git clean -fd