【问题标题】:How can I revert a push to repository in GitHub如何恢复推送到 GitHub 中的存储库
【发布时间】:2013-11-18 13:05:35
【问题描述】:

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

【问题讨论】:

标签: git


【解决方案1】:

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

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

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

git reset --hard HEAD~
git push -f

如果不是最后一次推送,请参阅 git cherry-pickgit rebase 的手册页,以在执行 git push -f 之前让您的本地目录与您希望 github 的外观相匹配。如果您不向git push 提供-f 选项,您将不会重写历史记录。如果它试图重写历史,任何推送都会失败。 -f 选项应该默认使用。

【讨论】:

  • 感谢您的帮助。
  • 关于此方法需要注意的一点:虽然这会从 GitHub 提交列表中删除该提交,但它似乎并没有完全删除它。只要你有引用特定提交的 GitHub URL,即使它被“删除”,你仍然可以访问它。
  • 另见help.github.com/articles/…重新删除“私人”提交
【解决方案2】:

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

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

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

git revert A B

这将恢复提交 A 和 B,为每个提交创建一个。

默认情况下,Git 会在 HEAD 之上创建额外的提交来说明正在恢复的更改。查看manual page 获取git revert 的更多详细信息,了解如何使用它。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-25
    • 2020-07-16
    • 2015-06-22
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    相关资源
    最近更新 更多