Git - 我们可以恢复已删除的提交吗?

Atr*_*tri 53 git restore git-commit

我很惊讶,我在SO上找不到答案.

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

例如,这就是我所做的:

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

# Force push the delete
$ git push --force
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*ink 129

要返回到该提交,您可以使用reflog来查找它的引用.

引用日志或"reflogs"记录在本地存储库中更新分支和其他引用的提示时.

运行此命令:

git reflog
Run Code Online (Sandbox Code Playgroud)

扫描前几个条目,找到丢失的提交.跟踪该提交的标识符(您可以使用第1列或第2列).我们称之为标识符"ID".

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

git reset --hard ID
git push -f origin master
Run Code Online (Sandbox Code Playgroud)

如果你在重置后做了其他的工作,那么你可以选择回到你的分支上,如下所示:

git cherry-pick ID
git push origin master
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你,先生!我的命得救了——当时我心脏病发作了。我以为我可以删除并取消暂存项目,而不仅仅是删除我所有的工作哈 (4认同)
  • 救星!我一生中从未如此害怕过 (2认同)

Kon*_*iak 14

是的,您可以找到您正在reflog使用的提交:

git reflog
Run Code Online (Sandbox Code Playgroud)

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

git checkout <your commit-SHA>
Run Code Online (Sandbox Code Playgroud)

或樱桃 - 选择它:

git cherry-pick <your commit-SHA>
Run Code Online (Sandbox Code Playgroud)


Par*_*ano 7

Try git reflog,又名参考日志,它允许您返回本地存储库中的历史记录。

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