10

我提交了一些更改,并推送到 github 中的远程分支。但后来我意识到我在提交中犯了一些错误,并推送了很多错误的文件。有没有办法恢复推送?

4

2 回答 2

20

git revert命令不会重写历史记录,但会使用新提交从提交中删除更改。那么你所要做的就是再次推动。这是建议的方法。

如果你真的想让 github 看起来像一个特定的提交从未真正发生过,有一种方法,但要小心(特别是如果其他用户对 github 存储库有贡献)。事实上,如果其他人使用这个 github 存储库,现在停止并使用第一段中提到的方法。

如果这是您自己的私有 github 存储库并且最后一次推送是您需要带走的(假设您仍在同一个本地分支上):

git reset --hard HEAD~
git push -f

如果这不是最后一次推送,请查看其中一个的手册页git cherry-pick,或者git rebase在执行git push -f. 如果您不提供-f选项 to git push,您将不会重写历史记录。如果它试图重写历史,任何推送都会失败。默认情况下不应使用该-f选项。

于 2013-11-07T03:31:43.770 回答
0

请记住,一旦您将提交推送到远程存储库,您应该谨慎行事,特别是如果您打算重写历史记录(即通过变基删除所有不需要的提交)。

如果您不关心历史记录,则可以通过使用git revert并向其传递您要撤消的提交标识符来恢复您的错误更改。

例如,如果您在两个提交 A 和 B 中包含更改,您希望删除:

git revert A B

这将还原提交 A 和 B,为每个提交创建一个提交。

默认情况下,Git 将在 HEAD 之上创建额外的提交来说明正在恢复的更改。查看手册页以获取git revert有关如何使用它的更多详细信息。

进行所需的还原后,只需再次向上推!

于 2013-11-07T02:52:08.183 回答