我似乎弄乱了我的本地存储库。
我知道我在几周前处理的特定文件中有一些内容。在多次合并之后,提交压缩和其他类型的历史记录重写我现在注意到这个内容丢失了。我也找不到我在这里添加这些更改的提交。
我之前读过有“孤立”分支和提交的本地副本。有没有办法以某种方式搜索这些特定文件或关键字?
答案 0 :(得分:1)
git fsck
命令可用于列出--unreachable
或--lost-found
的提交。
由于此时的输出难以阅读,我建议将找到的哈希值提供给git log
,以便在参考其余提交时显示它们。
git log --graph --all --numstat --oneline --decorate --full-history --date-order --color <Put Refs Here>
--numstat
命令将显示每次提交中哪些文件已更改,并希望帮助您找到文件/数据。
答案 1 :(得分:0)
感谢对我的问题的一些评论,我知道reflog
是寻找这些提交的可能命令之一。
我通常使用GUI来使用Git(SourceTree或GitKraken),所以我在命令行上有点迷失。从理论上讲,我知道如何找到这些文件:git reflog
,然后可能git show
来获取更改文件和差异来筛选所有这些文件(我确定有更好的方法可以这样做,但我没有使用CLI的经验。但是,由于我在上个月没有想到 ,我做了这些更改以及丢失的地方,这看起来不像我的解决方案。
经过一些谷歌搜索后,我找到了SmartGit。它是另一个git GUI,但它实际上支持显示这些丢失的提交及其上下文。以下是我在blog post中写下的指示:
我们正在“Log”视图中寻找“Recyclable Commits”分支:在SmartGit中打开存储库,右键单击“Repositories”面板中的存储库,在上下文菜单中选择“Log”,然后在打开“Log”视图,在“Branches”面板中选择“Recyclable Commits”,另外选择已选择的分支或“HEAD”:
浅橙点条目(相对于粗体黑点条目)是“孤儿”,不再是当前树的一部分。
您可以使用“过滤器”输入过滤掉这些内容,可以选择搜索文件名甚至文件内容! (所以我可以输入我知道我已经把我的内容放入的文件名,只查看这些相关的提交 - 甚至搜索我知道我在文件中写过的几个字 - 这真是太棒了!)
重要且非常有用的是这些提交显示在当前树的上下文中,因此您可以单击各个提交并查看其包含的文件更改,单击文件以查看正常情况下的差异。比在命令行上容易得多。
找到丢失的提交后,要么手动将文本复制到编辑器,要么通过右键单击并选择“Cherry-Pick ...”将所有更改提交到当前分支。然后照常提交(并且稍微跳舞,因为你刚刚保存了几天的工作)。
发现,内容已恢复。