【问题标题】:Lost Contents of Git StashGit Stash 丢失的内容
【发布时间】:2016-01-30 19:02:42
【问题描述】:

我相信我丢失了 Git Stash 的内容。这是我的工作流程:

我在分支 A 上工作,做了一些更改,然后做了 git stash。 然后我检查了我的 Master 分支,因为我需要从原点获取以使我的 master 保持最新。 错误地,我在 Master 中执行了 git stash pop 和 git status,我在 Branch A 中所做的所有更改都已暂存。

我的严重错误是我不想在 Master 中包含分支 A 阶段性更改,所以我检查了这些。这是因为我假设如果我回到分支 A 并执行 git stash pop,我会回到最新的更改。

但是,我检查了分支 A,执行了 git stash pop,但我的所有更改都不存在。一切都回到了最后一次提交。

我确实明白,如果我没有在 Master 中执行 git stash pop,我应该将所有更改都返回到分支 A - 所以吸取了教训。但从长远来看,有什么办法可以从中恢复过来吗?

我试过了:

git stash list

但我的更改没有任何隐藏的迹象。实际上,我认为我已经丢失了分支 A 中的这些更改,但如果我遗漏了什么,我会很感激您的帮助吗?

【问题讨论】:

标签: git version-control


【解决方案1】:

我找到了一个我想分享的解决方案。

您在执行 git stash pop (在我的情况下为 Master)后返回错误地签出文件的分支。然后你做:

$ git fsck --unreachable

这会为您提供悬空 blob 的列表 ...

unreachable blob 070204aa62dc0ef612f922a02d06d3....
unreachable blob 821c4ca73cb5c99f7fa5f23358e3a9....
unreachable blob b91c74fc1b5c0f8eb8ccfd1a8024c6....

然后我做了

git show 070204aa62dc0ef612f922a02d06d3....

这使您可以查看悬空 blob 中的内容,但不会为您提供文件名。然后,您可以使用 sha1 的前 5 个字符将该内容写入文件

git show f0480 > myfile

这会将“myfile”放在您当前所在的目录中。此时的 Myfile 是一个 .txt,然后您可以将其复制并粘贴/转换为正确的 MIME 类型 (.php)。

我还想指出,我发现 vi 在 recovering dangling commits 上的帖子很有帮助

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    在您检查主分支并在那里执行git stash pop 之后,您应该再次执行git stash 它会将所有更改再次放入您的存储中。

    根据您写的内容,我认为这些更改仍应在您的分支 A 上,因为您刚刚从主分支切换回分支 A。除非您在主分支上销毁它们。

    【讨论】:

    • 是的,我想我已经在 master 中销毁了它们 :( 这引出了一个问题……有没有办法在 master 中恢复未暂存的更改(或您签出的文件)?
    • 所以从 shirakia 粘贴的链接尝试解决方案
    • 这样做并进行了更多研究并找到了我分享的解决方案
    猜你喜欢
    • 2019-11-13
    • 2015-06-28
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 2017-11-25
    相关资源
    最近更新 更多