如何从 Atlassian Stash 恢复丢失的 git 提交?

How do I recover a lost git commit from Atlassian Stash?

我们有一个提交修复了我们代码库中的一个问题,该问题是通过拉取请求合并的。提交现在无处可寻。我不知道它是如何被删除的,因为它是很久以前的事了。好消息是我可以在 Stash 上看到拉取请求、提交哈希和更改差异。如果所有这些信息仍然存在于存储中,我该如何恢复提交?

你有几个选项(我只列出了其中的几个,还有更多选项):

  • 使用 git bisect 找出(提交)它是 "gone"
  • 在开发机器上使用 git reflog 来准确查看完成的内容和时间(是否在该点之后没有克隆 repo)
  • 重新创建/重新打开拉取请求并再次合并。

我的建议是使用 git bisect 来查找它何时消失。

How to use git bisect?

如果您知道提交哈希,您可以通过简单地调用 git show:

来检查提交是否存在于您的本地存储库中
git show <commit-id>

如果提交仍然存在,您可以使用 git branch

从该提交创建一个新分支
git branch save-my-old-commit <commit-id>

如果提交它 不存在 在你的本地存储库中(这是可能的,当无法从任何引用访问时),你可以尝试直接从远程存储库获取它并且然后检查一个新分支:

git fetch origin <commit-id>
git branch save-my-old-commit FETCH_HEAD

如果原始提交源自拉取请求,您还可以尝试从分叉存储库中拉取(我没有使用 Stash 的经验,所以我假设它的工作方式类似于 GitHub 或 Gitlab)。

将提交恢复到本地分支后,您可以按照您认为合适的方式继续操作,例如,在当前分支上挑选提交。