gpt4 book ai didi

git - 如何恢复 Git 中丢失的存储?

转载 作者:IT王子 更新时间:2023-10-29 01:07:13 25 4
gpt4 key购买 nike

我经常使用 git stashgit stash pop 来保存和恢复工作树中的更改。昨天,我对我的工作树进行了一些更改,这些更改是我 stash 和 pop 的,然后我对我的工作树进行了更多更改。我想回去查看昨天的 stash 更改,但是 git stash pop 似乎删除了对相关提交的所有引用。

我知道如果我使用 git stash 然后 .git/refs/stash 包含用于创建存储的提交的引用。 .git/logs/refs/stash 包含 整个存储。但是这些引用在 git stash pop 之后消失了。我知道提交仍在我的存储库中的某个地方,但我不知道它是什么。

有没有简单的方法来恢复昨天的 stash 提交引用?

最佳答案

一旦您知道您删除的存储提交的哈希值,您就可以将其作为存储应用:

git stash apply $stash_hash

或者,您可以为它创建一个单独的分支

git branch recovered $stash_hash

之后,您可以使用所有常规工具做任何您想做的事情。完成后,把 Twig 吹走。

寻找哈希

如果您刚刚 pop 它并且终端仍然打开,您将 still have the hash value printed by git stash pop on screen(谢谢,Dolda)。

否则,您可以在 Linux、Unix 或 Windows 的 Git Bash 上使用它找到它:

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

...或使用适用于 Windows 的 PowerShell:

git fsck --no-reflog | select-string 'dangling commit' | foreach { $_.ToString().Split(" ")[2] }

这将在提交图的提示处向您显示所有提交,这些提交不再被任何分支或标记引用——每个丢失的提交,包括您曾经创建的每个 stash 提交,都将位于该图中的某个位置。

找到你想要的 stash 提交的最简单方法可能是将该列表传递给 gitk:

gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )

...如果使用适用于 Windows 的 PowerShell,请参阅 the answer from emragins

这将启动一个存储库浏览器,向您显示存储库中的每一次提交,无论它是否可访问。

如果你更喜欢控制台上的漂亮图形而不是单独的 GUI 应用程序,你可以将 gitk 替换为 git log --graph --oneline --decorate .

要发现 stash 的提交,请查找以下形式的提交消息:

somebranch 上的 WIP:commithash 一些旧的提交消息

注意:如果您在执行 git stash 时没有提供消息,提交消息将仅采用这种形式(以“WIP on”开头)。

关于git - 如何恢复 Git 中丢失的存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/89332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com