【问题标题】:GitHub - How to revert changes to previous stateGitHub - 如何将更改恢复到以前的状态
【发布时间】:2011-10-21 18:02:45
【问题描述】:

我使用 GitHub 作为我的远程存储库。

我已经向服务器推送了 5 个提交,并希望恢复到这些提交之前的状态。

如果提交哈希是3425661dba2aadccdbab,我如何将整个本地/远程恢复到该提交?我试过了

$ reset --hard 3425661dba2aadccdbab

但这只会将我的工作头重置到那个分支,并且需要我再次执行git pull。我尝试结帐,但这导致我降落在“分离头”分支。

【问题讨论】:

  • 这个需要github标签吗?它似乎不是 github 特定的。

标签: git github repository commit revert


【解决方案1】:

您基本上有两种选择来恢复更改:

  1. 创建一个应用反向更改的新提交。这是首选选项,因为它不会更改公共存储库上的历史记录
  2. 删除提交并强制推送它们。

第一个选项可以使用git revert实现

git-revert - 恢复一些现有的提交

给定一个或多个现有提交,还原相关补丁引入的更改,并记录一些记录它们的新提交。

一个例子是git revert -n HEAD~5..HEAD。此命令创建 5 个新提交,每个提交都撤消当前签出分支的最后 5 个提交之一。

第二个选项是实际删除提交。请注意,这会更改存储库中的历史记录。因此,任何已经进行更改的人都可能会感到相当惊讶,事情很快就会变得一团糟。也就是说,你可以这样做

git reset --hard HEAD~5
git push --force

第一个命令将擦除当前工作副本中所有未提交的更改。并将本地存储库重置为当前 HEAD - 5 次提交的状态。第二个命令将强制推送到默认远程(即 GitHub)那里,与当前本地存储库不同的任何更改都将被覆盖。

再次警告:如果您真的不知道自己在做什么,请不要使用此选项,因为如果操作不当,可能会导致您或其他人的数据丢失。请改用第一个选项,因为它会透明地删除更改,但不会产生历史重写的不良副作用。

【讨论】:

  • 你能解释一下 HEAD~5..HEAD 的作用吗?
  • @RutgerHofste 它描述了HEAD(即当前签出提交)和HEAD之前的5次提交之间的提交范围。因此,git revert 将为最后 5 次提交创建还原提交。同样,git reset 命令会将当前分支的 5 个提交移回。请参阅this blog post 以获得有关如何为命令指定相对提交的很好的解释。
【解决方案2】:

您可以对在所需状态之后所做的所有提交执行git revert <commit>。 (以相反的顺序避免任何冲突。)

如果有其他人共享 repo,这是一种干净的方式,但有点费力。 (虽然你可以自动化......?)

【讨论】:

    【解决方案3】:

    做一个git push -f。如果有其他人使用相同的存储库,这不是一个好主意。

    【讨论】:

    • 我认为 OP 有其他人使用相同的 repo
    • 在你推送之前,Git 也会变基,这会让他们更加生气。 =)
    • 是否可以强制推送到特定的分支?
    • @cynistersix git push -f remote_name your_private_branch.
    【解决方案4】:

    执行 git checkout,然后将其提交到您想要的分支。这将使用旧代码进行新的提交(因此您将有 6 次提交)。

    git checkout HEAD~3,其中 3 是您想要恢复的提交次数。

    更好的是,您可以将单个文件签出到当前的 HEAD 中:

    git checkout 3425661dba2aadccdbab:path/to/file/from/base

    这将减少惹其他人生气的可能性,因为你把众所周知的地毯从他们脚下拉出来。

    编辑:

    这里有一个类似的问题:

    Checkout old commit and make it a new commit

    【讨论】:

    • 嗯,但正如 OP 所说,如果 git checkout,他将最终进入一个“分离的头”分支。我以前也有过这个;)
    猜你喜欢
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2011-06-27
    • 2018-09-12
    相关资源
    最近更新 更多