如何在git中反转提交?

时间:2011-03-21 18:27:52

标签: git github commit

我对git的运作方式并不熟悉。我错误地提交了一个提交,并希望将其恢复。我做了一个

git reset --hard HEAD~1

当心Google员工: 这不仅会恢复提交,还会丢弃所有文件更改!

现在项目在我的机器上恢复,但不在github上。如果我尝试推送此代码,我会通过1次提交得到错误“你的分支在'origin / master'后面,并且可以快速转发。”如何从github中删除此提交?

6 个答案:

答案 0 :(得分:42)

这篇文章各种场景(提交已完成以及推送)有出色的解释或者只是一个提交,在推送之前):

http://christoph.ruegg.name/blog/git-howto-revert-a-commit-already-pushed-to-a-remote-reposit.html

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

git revert dd61ab32

答案 1 :(得分:31)

您可以执行git push --force但请注意您正在重写历史记录,并且使用该回购邮件的任何人都会遇到此问题。

如果您想防止此问题,请不要使用重置,而是使用git revert

答案 2 :(得分:17)

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

答案 3 :(得分:7)

无法对其他答案发表评论,我会提供一些额外的信息。

如果您想revert上一次提交,可以使用git revert headhead指的是您分支中最近的提交。

使用head~1时使用reset的原因是您告诉Git“删除提交之后的所有更改”(reset --hard)“提交之前的提交”( head~1)。

reset 提交,revert 提交。

正如AmpT所指出的那样,您也可以使用提交SHA来识别它,而不是计算距离head的距离。 SHA可以在日志(git log)和其他各种方式中找到。

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

答案 4 :(得分:2)

我认为您需要推送还原提交。所以来自github的pull,包括你想要恢复的提交,然后使用git revert并推送结果。

如果您不关心github存储库中其他人的克隆被破坏,您还可以在resetgit push origin :master之后删除并重新创建github上的主分支。

答案 5 :(得分:-5)

git push -f也许?

man git-push会说明更多信息。