如何将更改恢复到以前的状态

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

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

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

$ reset --hard 3425661dba2aadccdbab

但只是重新设置了我的工作负责人,并要求我再次进行git pull 。 我尝试了结账,但这导致我在一个“独立的头”分支登陆。


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

  • 创建一个应用反向更改的新提交。 这是首选方法,因为它不会更改公共存储库上的历史记录
  • 删除提交并强制推送它们。
  • 第一个选项可以通过使用git revert来实现

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

    给定一个或多个现有的提交,恢复相关修补程序引入的更改,并记录一些记录它们的新提交。

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

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

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

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

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


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


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

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

    链接地址: http://www.djcxy.com/p/18849.html

    上一篇: How to revert changes to previous state

    下一篇: commit an existing commit after git reset