我使用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)那里,任何与当前本地存储库不同的更改都将被覆盖.
再次发出警告:如果您不知道自己在做什么,请不要使用此选项,因为如果操作不当,可能会导致您或其他人丢失数据.使用第一个选项,因为它将透明地删除更改,但没有历史重写的令人讨厌的副作用.