如何撤消git stash clear

Ash*_*ker 35 git

我执行git stash保存"ABC"而且我错误地把git stash清除了.如何检索存储ABC中的数据.请帮忙

mam*_*uso 67

正如可以在git stash的文档中找到的那样,如果有效,你可能会很幸运:

恢复被错误清除/丢弃的藏匿处

如果您错误地丢弃或清除了皮带,则无法通过正常的安全机制恢复它们.但是,您可以尝试以下咒语来获取仍在存储库中但仍无法访问的存储列表:

git fsck --unreachable | grep commit | 切-d\-f3 | xargs git log --merges --no-walk --grep = WIP

如果您发现错误清除了存储,那么您可以执行以下操作:

git stash apply <stash>
Run Code Online (Sandbox Code Playgroud)

编辑:改为使用此命令git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk --grep=WIP

  • 在OSX上:```git fsck --unreachable | grep commit | cut -d'' - f3 | xargs git log --merges --no-walk --grep = WIP``` (12认同)
  • @AshishBanker:然后它消失了.让这成为你的一课.不要使用`git stash`来存储你关心的更改,使用`git commit`,即使它是部分的.之后你总是可以`git commit --amend`和`git rebase -i`. (3认同)
  • 救了我的屁股。`cut -d''-f3`也对我有用。 (3认同)
  • 在 Windows 上使用 `git bash` 时,它对我很有用。它是恢复`stashs` 的非常强大的工具。`git stash apply &lt;commit SHA&gt;`。不觉得需要`git stash pop`,因为我不小心清除了我的存储列表。 (3认同)
  • cut的论点是不正确的。\之后应该有两个空格。这是因为markdown解释器删除了其中一个空格。如@JJS所建议,将-d''或-d“”用作cut的第一个参数。 (2认同)

stu*_*dog 22

以上所有答案都以 a 结尾,git stash apply [commit]这是好的,但不是git stash clear. 为此,您需要重新存储孤立的存储提交。我发现这些指令几乎有效,但需要一个标志才能到达那里。总结:

  1. 找到孤立的存储提交: git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk
  2. 重新存储提交: git update-ref --create-reflog refs/stash 4b3fc45c94caadcc87d783064624585c194f4be8 -m "My recover stash"

  • 这绝对是一种魅力。如果您没有提交哈希,这就是解决方案:) (2认同)

suh*_*lvs 8

运行此命令来查找提交:

git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk --grep=WIP
Run Code Online (Sandbox Code Playgroud)

将列出类似以下内容:

Checking object directories: 100% (256/256), done.
commit c36e565014d9a927c36f16e78bc327eb375d33b8
Merge: dff6bc1 4e05a0c
Author: suhailvs <suhailvs@gmail.com>
Date:   Thu Jul 19 13:32:01 2018 +0530

WIP on master: dff6bc1 added menu
Run Code Online (Sandbox Code Playgroud)

然后签出该提交c36e565014

git checkout c36e565014
Run Code Online (Sandbox Code Playgroud)


fre*_*yle 8

我不得不使用

git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk
Run Code Online (Sandbox Code Playgroud)

获取所有孤儿存储,这将给出类似于以下的o/p:

Checking object directories: 100% (256/256), done.
Checking objects: 100% (395/395), done.
commit 3928306034b292770cc4cd2987c034ffad250e0b    //commit stash hash
Merge: 16056a0 ac3c354
Author: Jimmy <mail>
Date:   Thu Nov 14 17:31:05 2019 +0530

    On profile: stashing for

commit 50f6f3a7161dd44bfcef2b8328a2329db4c7ec34
Run Code Online (Sandbox Code Playgroud)

并使用

git apply stash 3928306034b292770cc4cd2987c034ffad250e0b
Run Code Online (Sandbox Code Playgroud)

我又拿回了我藏起来的零钱。感谢https://mobilejazz.com/blog/how-to-recover-a-deleted-git-stash/

  • 我认为对于你的最后一个命令,正确的方法是:“git stash apply 3928306034b292770cc4cd2987c034ffad250e0b” (3认同)