我想我弄丢了我的Git仓库里的东西。这是我的工作流程:
我在分支A上工作,做了一些修改,然后做了git stash。然后,我签出了我的Master分支,因为我需要从源获取,以使我的master保持最新。由于错误,我在Master中保存了git stash pop和git status,我在Branch A中所做的所有更改都是在那里进行的。
我的关键错误是我不想在Master中包含Branch A阶段的更改,所以我检查了这些更改。这是因为我假设如果我返回到分支A并执行git stash pop,我将返回到最新的更改。
然而,我签出了Branch A,做了git stash pop,我所有的更改都不在那里。一切都回到了最后一次提交。
我确实明白,如果我没有在Master中做git stash pop,我应该在分支A中得到所有的更改-所以我学到了教训。但从长远来看,有没有办法从这种情况中恢复过来?
我试过了:
git stash list
但我的零钱没有藏起来的迹象。实际上,我认为我已经丢失了分支A中的这些更改,但是如果我遗漏了什么,我将非常感谢任何帮助?
发布于 2015-10-30 20:41:47
我找到了一个我想分享的解决方案。
您返回到Branch,在这里您在执行git stash pop之后错误地签出了文件(在我的例子中是Master)。然后你要做的是:
$ git fsck --unreachable
这给了你一个悬空斑点的列表...
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上的帖子很有帮助
希望这能有所帮助。
发布于 2015-10-30 19:12:32
在检查了主分支并在那里执行了git stash pop
之后,您应该再次执行git stash
,它会将所有更改再次放入您的存储中。
根据您所写的内容,我认为这些更改应该仍然在您的分支A上,因为您刚刚从主分支切换回分支A,除非您在主分支上销毁了它们。
https://stackoverflow.com/questions/33434540
复制相似问题