2011-03-21 185 views
32

我并不十分熟悉git是如何工作的。我错误地推了一个提交,并想恢复它。我做了一个如何在git中提交提交?

git reset --hard HEAD~1 

谨防研究员的Google:这不仅恢复了提交,但丢弃所有文件更改!

现在项目已在我的机器上恢复,但不在github上。如果我尝试推送此代码,我会收到错误'您的分支在1次提交后落后于'origin/master',并且可以进行快速转发。'我如何从github中删除这个提交?

+0

git push -f做了诀窍。谢谢。 – David 2011-03-21 18:31:47

+0

快速转发消息只是一个提示,并非真正的错误。如果在每个“提交”后都没有“推”,那么这是正常的消息。 – eckes 2011-03-21 19:45:57

回答

26

你可以做git push --force但请注意你正在重写历史记录,任何使用repo的人都会遇到问题。

如果你想避免这个问题,不要使用重置,而是使用git revert

+4

一般来说,我认为重写历史不是一个好主意,但特别是在共享环境中。 使用'git revert' – trimbletodd 2012-05-22 20:38:40

-5

git push -f也许?

man git-push会告诉更多。

2

我认为你需要推动恢复提交。因此,github上的pull再次包括您想要恢复的提交,然后使用git revert并推送结果。

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

5

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

如果你想要revert上次提交,你可以使用git revert headhead引用分支中最近的提交。

的原因,你在使用reset是你告诉GIT中“删除后在提交所有更改”使用head~1reset --hard)“提交一个头前”(head~1)。

reset提交,revert提交。

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

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