【问题标题】:Git - Can we recover deleted commits? [duplicate]Git - 我们可以恢复已删除的提交吗? [复制]
【发布时间】:2016-04-17 13:12:57
【问题描述】:

我很惊讶,我在 SO 上找不到这个问题的答案。

我们可以在 git 中恢复/恢复已删除的提交吗?

例如,这就是我所做的:

# Remove the last commit from my local branch
$ git reset --hard HEAD~1

# Force push the delete
$ git push --force

现在,有没有办法找回被删除的提交? git 是否在内部记录(记录)删除?

【问题讨论】:

  • 你可以通过 git reflog 找到你之前的 HEAD 提交并再次查看
  • 以防万一有人想知道:如果您曾经在本地计算机中进行过提交(您在本地存储库中提交或获取更改),则此处介绍的方法将起作用。如果你想恢复别人在 GitHub / GitLab 服务器上推送和删除的提交,请查看 GitHub 的 API,将有 API 帮助从旧提交创建分支。

标签: git restore git-commit


【解决方案1】:

要返回该提交,您可以使用 reflog 查找它的参考。

参考日志,或“reflogs”,记录分支的提示和 其他引用已在本地存储库中更新。

运行这个命令:

git reflog

扫描前几个条目,找到丢失的提交。跟踪该提交的标识符(您可以使用第一列或第二列)。我们将标识符称为“ID”。

如果你在重置后没有做任何额外的工作 --hard 你可以这样做:

git reset --hard ID
git push -f origin master

如果你在重置后做了其他工作,你可以像这样选择是否回到你的分支:

git cherry-pick ID
git push origin master

【讨论】:

  • 谢谢先生!我的生命得救了——当时心脏病发作了。以为我可以丢弃和取消暂存项目,而不仅仅是删除我所有的工作哈
【解决方案2】:

是的,您可以在reflog 中找到您的提交:

git reflog

显示在您的存储库中创建的所有提交 - 在此之后您应该通过 checkout 命令签出以删除提交

git checkout <your commit-SHA>

或通过以下方式挑选它:

git cherry-pick <your commit-SHA>

【讨论】:

  • 从 reflog 中找到了我的提交,并且能够通过 checkout 9849343whatever commit SHA 恢复。非常感谢。
  • git checkout 救了我的命。非常感谢你
【解决方案3】:

试试git reflog,也就是参考日志,它可以让您回到本地仓库中的历史记录。

https://git-scm.com/docs/git-reflog

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 2012-07-29
    • 2011-09-10
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多