GitHub - 如何将更改还原到以前的状态

Zhe*_*hen 39 git commit github repository revert

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

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

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

$ reset --hard 3425661dba2aadccdbab
Run Code Online (Sandbox Code Playgroud)

但那只是把我的工作头重新安置到那个分支,并要求我再做git pull一次.我试过结帐,但这导致我降落在"独立的头"分支.

Hol*_*ust 61

您基本上有两个选项可以还原更改:

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

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

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

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

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

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

git reset --hard HEAD~5
git push --force
Run Code Online (Sandbox Code Playgroud)

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

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

  • @RutgerHofste它描述了`HEAD`(即当前结账提交)和`HEAD`之前的5次提交之间的提交范围.因此,`git revert`将为最后5次提交创建恢复提交.类似地,`git reset`命令将移动当前分支5提交回来.有关如何为命令指定相对提交的详细说明,请参阅[此博客文章](http://www.paulboxley.com/blog/2011/06/git-caret-and-tilde). (3认同)