【发布时间】:2013-11-18 13:05:35
【问题描述】:
我提交了一些更改,并推送到 github 中的远程分支。 但后来我意识到我在提交中犯了一些错误,并推动 很多错误的文件。有没有办法恢复推送?
【问题讨论】:
-
您可以退出修订。或者至少,更新到以前的版本,更正更改并重新提交
-
你可以看看这个帖子How to reverse a commit.。
标签: git
我提交了一些更改,并推送到 github 中的远程分支。 但后来我意识到我在提交中犯了一些错误,并推动 很多错误的文件。有没有办法恢复推送?
【问题讨论】:
标签: git
git revert 命令不会重写历史记录,但会使用新提交从提交中删除更改。那么你所要做的就是再次推动。这是建议的方法。
如果你真的想让 github 看起来像一个特定的提交从未真正发生过,有一种方法,但要小心(特别是如果其他用户贡献了 github 存储库)。其实如果其他人使用这个 github 存储库,现在就停下来,使用第一段中提到的方法。
如果这是您自己的私有 github 存储库并且最后一次推送是您需要带走的(假设您仍在同一个本地分支上):
git reset --hard HEAD~
git push -f
如果不是最后一次推送,请参阅 git cherry-pick 或 git rebase 的手册页,以在执行 git push -f 之前让您的本地目录与您希望 github 的外观相匹配。如果您不向git push 提供-f 选项,您将不会重写历史记录。如果它试图重写历史,任何推送都会失败。 -f 选项应该不默认使用。
【讨论】:
请记住,一旦您将提交推送到远程存储库,您应该谨慎行事,尤其是如果您打算重写历史记录(即通过变基删除所有不需要的提交)。
如果您不关心历史记录,则可以通过使用 git revert 并将您要撤消的提交标识符传递给它来恢复您的错误更改。
例如,如果您在两个提交 A 和 B 中包含更改,您希望删除:
git revert A B
这将恢复提交 A 和 B,为每个提交创建一个。
默认情况下,Git 会在 HEAD 之上创建额外的提交来说明正在恢复的更改。查看manual page 获取git revert 的更多详细信息,了解如何使用它。
在进行所需的还原后,只需再次向上推即可!
【讨论】: