github-如何在git中撤消提交?

我不太熟悉git的工作原理。 我错误地推送了一个提交并想还原它。 我做了一个

git reset --hard HEAD~1

谨防Google员工们:这不仅会还原提交,还会丢弃所有文件更改!

现在该项目已在我的计算机上还原,但不在github上还原。 如果我尝试推送此代码,则会收到错误消息“您的分支在1次提交后位于'origin / master'之后,并且可以快速转发。” 如何从github删除此提交?

David Mulder asked 2020-08-01T20:19:25Z
6个解决方案
43 votes

本文对如何处理各种情况(在提交和推送之前都完成了提交,或者在推送之前只是提交)进行了很好的解释:

[HTTP://Christoph.如egg.那么/blog/git-how to-revert-啊-commit-already-pushed-to-啊-remote-reposit.HTML]

在本文中,我看到的最简单的命令通过提交ID还原先前的提交是:

git revert dd61ab32
AmpT answered 2020-08-01T20:21:25Z
32 votes

您可以执行git revert,但请注意,您正在重写历史记录,任何使用该存储库的人都会遇到此问题。

如果要防止出现此问题,请不要使用reset,而应使用git revert

Let_Me_Be answered 2020-08-01T20:20:56Z
18 votes

或者,您可以尝试使用git revert [http://www.kernel.org/pub/software/scm/git/docs/git-revert.html。]我认为类似git revert HEAD~1 -m 1的东西会恢复您的最后一次提交(如果仍然是 最后一次提交)。

Luke answered 2020-08-01T20:21:45Z
7 votes

无法评论其他答案,我将提供一些额外信息。

如果要对revert进行最后一次提交,则可以使用headgit log引用分支中的最新提交。

使用git log时使用head的原因是,您要告诉Git“删除之后的提交中的所有更改”(reset --hard)“先提交一个提交”(head~1)。

head是提交,git log是提交。

正如AmpT所指出的,您还可以使用提交SHA进行标识,而不用计算距head的距离。 可以在日志(git log)和多种其他方式中找到SHA。

您还可以始终在Git中使用任何其他指针。 例如 标签或分支。 并且还可以使用所有其他有趣的其他方式来引用提交[https://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html#_specifying_revisions]

Rodel30 answered 2020-08-01T20:22:27Z
2 votes

我认为您需要推送一个还原提交。 因此,再次从github获得reset,包括要还原的提交,然后使用git push origin :master并推送结果。

如果您不关心别人对github存储库的克隆是否损坏,也可以在resetgit push origin :master之后删除并在github上重新创建master分支。

Ilkka answered 2020-08-01T20:22:52Z
-5 votes

git push -f也许吗?

man git-push将说明更多。

jho answered 2020-08-01T20:23:16Z
translate from https://stackoverflow.com:/questions/5381945/how-do-i-reverse-a-commit-in-git