关于git:GitHub – 如何将更改还原到以前的状态

GitHub - How to revert changes to previous state

我正在使用Github作为远程存储库。

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

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

1
$ reset --hard 3425661dba2aadccdbab

但这只会把我的工作负责人重新分配给那个部门,并要求我再做一次git pull。我试着结账,但这使我降落在一个"独立的头"分支。


您基本上有两个恢复更改的选项:

  • 创建应用反向更改的新提交。这是首选选项,因为它不会更改公共存储库上的历史记录。
  • 取消承诺并强制推行。
  • 第一种选择可以通过使用git revert来实现。

    git-revert - Revert some existing commits

    Given one or more existing commits, revert the changes that the related patches introduce, and record some new commits that record them.

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

    第二种选择是实际删除提交。请注意,这会更改存储库中的历史记录。因此,任何已经做出改变的人可能都会非常惊讶,事情很快就会变得混乱。也就是说,你可以

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

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

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


    做一个git push -f。如果有其他人使用同一回购协议,这不是一个好主意。


    你可以在你所要求的状态之后对所有的承诺执行git revert 。(顺序相反,以避免任何冲突。)

    如果有其他人共享回购协议,这是一种干净的方式,但有点轻松。(不过,您可以自动化…?)


    执行git签出,然后将其提交到所需的分支。这将使用旧代码进行新的提交(因此您将有6个提交)。

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

    更好的是,您可以将单个文件签入当前头部:

    埃多克斯1〔2〕

    这将减少让其他人对你从他们脚下拉出众所周知的地毯而生气的可能性。

    编辑:

    这里有一个类似的问题:

    签出旧提交并使其成为新提交