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

时间:2015-04-21 08:59:55

标签: git bitbucket-server

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

2 个答案:

答案 0 :(得分:3)

如果您知道提交哈希,只需调用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

如果原始提交源自pull请求,您也可以尝试从分叉存储库中提取(我没有使用Stash的经验,因此我假设它与GitHub或Gitlab类似)。

将提交恢复到本地分支后,您可以按照自己的意愿继续进行操作,例如在当前分支的顶部选择提交。

答案 1 :(得分:0)

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

  • 使用git bisect找出何时(提交)它已“消失”
  • 在开发机器上使用git reflog可以准确查看已完成的操作以及何时(在该点之后未克隆存储库)
  • 重新创建/重新打开拉取请求并再次合并。

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

How to use git bisect?