【问题标题】:Git: Undoing uncommitted changes to reset specific file [duplicate]Git:撤消未提交的更改以重置特定文件[重复]
【发布时间】:2016-12-24 13:59:09
【问题描述】:

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

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

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

编辑:有什么帮助是我知道丢失文件的内容。如果我可以 grep 悬空的 blobs/commits 与此内容?

【问题讨论】:

  • 您使用的是 IDE 吗?如果是这样,请检查本地历史记录,或尝试撤消。
  • 很遗憾,这是在远程主机上。
  • 你在重置之前git .add了吗?如果没有,我认为没有办法恢复
  • 该文件在 git 中被跟踪(它被添加),但它没有被提交。

标签: git


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你可以的

    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 &lt;hash&gt; 查看文件。

    【讨论】:

      猜你喜欢
      • 2015-01-30
      • 2016-01-11
      • 2021-09-30
      • 1970-01-01
      • 2010-10-30
      • 2014-06-05
      • 1970-01-01
      • 2015-09-25
      相关资源
      最近更新 更多