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

标签 git github repository commit revert

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

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

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

$ reset --hard 3425661dba2aadccdbab

但这只会将我的工作重心转移到该分支,并需要我再次执行 git pull。我尝试 checkout ,但这导致我进入了一个“独立的负责人”分支。

最佳答案

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

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

第一个选项可以通过使用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 个新提交,每个提交都会撤消当前 checkout 分支的最后 5 个提交之一。

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

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

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

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

关于GitHub - 如何将更改恢复到以前的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6971717/

相关文章:

git:将当前分支中正在进行的未提交工作提交到新分支

git - Egit如何将当前分支改为master?

node.js - npm install 模块的权限被拒绝

python - 是否可以在 Google Colab 中导入一个 python 文件,它本身导入一个 GitHub 存储库来运行?

安装新版本的 R 后恢复所有 R 包?

git - 你是否推送每一个提交?

git - 从 GIT 迁移到 TFS 并保留 checkin 时间戳

git - 对 Git 项目进行更改,但未经批准不得点或覆盖项目上的文件

github - github上的"This comparison is taking too long to generate."错误

perl - 为什么 Magnum 存储库不显示 CentOS 6 中的软件包?