我对git的运作方式并不熟悉。我错误地提交了一个提交,并希望将其恢复。我做了一个
git reset --hard HEAD~1
当心Google员工: 这不仅会恢复提交,还会丢弃所有文件更改!
现在项目在我的机器上恢复,但不在github上。如果我尝试推送此代码,我会通过1次提交得到错误“你的分支在'origin / master'后面,并且可以快速转发。”如何从github中删除此提交?
答案 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 head
。 head
指的是您分支中最近的提交。
使用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存储库中其他人的克隆被破坏,您还可以在reset
:git push origin :master
之后删除并重新创建github上的主分支。
答案 5 :(得分:-5)
git push -f
也许?
man git-push
会说明更多信息。