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

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


当前回答

git reflog show将显示HEAD的历史。你可以用这个查出你被拉之前在哪里。然后你可以重置你的HEAD到那个提交。

其他回答

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

撤销git拉取

git reset --hard HEAD^

将本地回购恢复到以前的提交状态。(注意:HEAD^表示当前分支顶端的第一个直接父结点。HEAD^是HEAD^1的缩写,如果你想,你也可以进一步往上(例如HEAD^2, HEAD^3…) 重置后,如果留下一些未知文件(由于原始git拉取而到达的文件),它们将被列为未跟踪文件,您可以使用

  git clean -fd

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

git pull 

哎呦?

git reset --keep HEAD@{1}

1.7.1以上版本的git没有——keep。如果您使用这样的版本,您可以使用—很难—但这是一个危险的操作,因为它会丢失任何本地更改。


致评论者

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

从https://git-scm.com/docs/git-reset文档/ git-reset.txt-Undoamergeorpullinsideadirtyworkingtree

Undo a merge or pull inside a dirty working tree $ git pull (1) Auto-merging nitfol Merge made by recursive. nitfol | 20 +++++---- ... $ git reset --merge ORIG_HEAD (2) Even if you may have local modifications in your working tree, you can safely say git pull when you know that the change in the other branch does not overlap with them. After inspecting the result of the merge, you may find that the change in the other branch is unsatisfactory. Running git reset --hard ORIG_HEAD will let you go back to where you were, but it will discard your local changes, which you do not want. git reset --merge keeps your local changes.

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

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

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

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

我目前在一个分支开发,我应该签出到一个新的分支,并拉入另一个分支,让我们说分支a,但我不小心运行 git在退房前拉出原点A。

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

git reset -hard development @{"10分钟前"}

如果你在Windows CMD并得到错误:未知开关e

试着像这样加引号

git重置-hard ' development @{"10分钟前"}'