Git:撤消未提交的更改以重置特定文件

时间:2016-08-17 19:18:30

标签: git

我的存储库中有一个文件,我意外地将其重置为git reset --hard。该文件仍在存储库中,但由于未提交更改,我无法访问它。

我发现了一些相关的问题:

然而有了这些我只发现了一些旧的丢失的东西,但不是最近的那个。有没有办法为这个特定文件提供grep历史记录?

编辑:有什么可以帮助我知道丢失文件的内容。也许如果我可以grep悬挂blob /提交这个内容?

2 个答案:

答案 0 :(得分:0)

Git会将对象存储在其数据库中。您可以通过执行以下操作找到该文件:

find .git/objects/ -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort

您应该按日期获取对象列表。每个条目都以sha结尾。取每个sha(即d670460b4b4aece5915caf5c68d12f560a9fe3e4),然后输入:

git show <the sha>

在找到正确的文件之前,您可能需要尝试几个。

我的回答来自https://stackoverflow.com/a/7376959/4374801

答案 1 :(得分:0)

你可以做到

git fsck --full --cache --dangling

并查找dangling blob条目 - 其中一条应该是您丢失的文件。

你可以尝试grep(这里我们选择一组更大的未引用对象,只是为了确定):

git fsck --unreachable --no-reflogs --full 2>/dev/null | awk '$2 == "blob" {print $3}' | xargs git grep -a your-search-string

它将打印找到的blob的SHA-1以及匹配的行。

获得哈希后,使用git show <hash>查看文件。