我并不十分熟悉git是如何工作的。我错误地推了一个提交,并想恢复它。我做了一个如何在git中提交提交?
git reset --hard HEAD~1
谨防研究员的Google:这不仅恢复了提交,但丢弃所有文件更改!
现在项目已在我的机器上恢复,但不在github上。如果我尝试推送此代码,我会收到错误'您的分支在1次提交后落后于'origin/master',并且可以进行快速转发。'我如何从github中删除这个提交?
我并不十分熟悉git是如何工作的。我错误地推了一个提交,并想恢复它。我做了一个如何在git中提交提交?
git reset --hard HEAD~1
谨防研究员的Google:这不仅恢复了提交,但丢弃所有文件更改!
现在项目已在我的机器上恢复,但不在github上。如果我尝试推送此代码,我会收到错误'您的分支在1次提交后落后于'origin/master',并且可以进行快速转发。'我如何从github中删除这个提交?
你可以做git push --force
但请注意你正在重写历史记录,任何使用repo的人都会遇到问题。
如果你想避免这个问题,不要使用重置,而是使用git revert
一般来说,我认为重写历史不是一个好主意,但特别是在共享环境中。 使用'git revert' – trimbletodd 2012-05-22 20:38:40
git push -f
也许?
man git-push
会告诉更多。
或者你可以尝试使用Git恢复http://www.kernel.org/pub/software/scm/git/docs/git-revert.html。我认为像git revert HEAD~1 -m 1
这样的东西会恢复上次提交(如果它仍然是最后一次提交)。
我认为你需要推动恢复提交。因此,github上的pull
再次包括您想要恢复的提交,然后使用git revert
并推送结果。
如果您不关心其他人的github存储库克隆被破坏,还可以在您的reset
:git push origin :master
之后删除并重新创建github上的主分支。
这文章有优良的解释为如何去各种场景(其中提交已经完成以及推或只是一个承诺,推前):
http://christoph.ruegg.name/blog/git-howto-revert-a-commit-already-pushed-to-a-remote-reposit.html
从文章中,我看到了的最简单的命令恢复先前通过其提交ID承诺,是:
git revert dd61ab32
无法评论他人的答案,我会提供一些额外的信息。
如果你想要revert
上次提交,你可以使用git revert head
。 head
引用分支中最近的提交。
的原因,你在使用reset
是你告诉GIT中“删除后在提交所有更改”使用head~1
(reset --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
git push -f做了诀窍。谢谢。 – David 2011-03-21 18:31:47
快速转发消息只是一个提示,并非真正的错误。如果在每个“提交”后都没有“推”,那么这是正常的消息。 – eckes 2011-03-21 19:45:57