如何在git中反转提交?

Dav*_*der 43 git commit github

我对git的工作原理并不熟悉.我错误地提交了一个提交,并希望将其恢复.我做了一个

git reset --hard HEAD~1
Run Code Online (Sandbox Code Playgroud)

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

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

Amp*_*mpT 44

文章有一个极好的说明为如何去了解各种情况(如提交已经完成以及推或只是一个承诺,推前):

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

从文章中,我看到通过其提交ID恢复先前提交最简单命令是:

git revert dd61ab32
Run Code Online (Sandbox Code Playgroud)


Let*_*_Be 32

您可以这样做,git push --force但请注意您正在重写历史记录,任何使用该回购的人都会遇到此问题.

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

  • 一般来说,我说重写历史并不是一个好主意,尤其是在共享环境中.加上`git revert` (5认同)
  • 注意:`git revert <commit id>` 从磁盘中删除新添加的文件。幸运的是我让它们在 vscode 中打开并做了 cmd+s (2认同)

Luk*_*uke 18

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


Rod*_*l30 7

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

如果你想要revert最后一次提交,你可以使用git revert head.head指您分支中最近的提交.

你在使用head~1时使用的原因reset是你告诉Git"删除提交之后的所有更改"(reset --hard)"在head之前提交一个"(head~1).

reset提交,revert提交.

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

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