我有一个曾经被跟踪的文件,并且是我的git历史记录中几个提交的一部分。后来,我将该文件包含在了我的.gitignore中。我正在尝试恢复那个文件。我试过了git重置--硬<sha>我试过了git签出<分支/远程/文件/etc>。如果没有这些命令恢复了该文件,则其不会出现在工作目录中。

请注意,我可以在git历史记录中看到该文件。我可以查看我对它所做的更改,如果需要的话,我可以复制git向我显示的内容。但我如何从早期提交历史记录中恢复此文件?重置和签出似乎对我不起作用,我怀疑这是因为在我将该文件提交给git后,我将其包含在.gitignore中并提交。

[更新]

我已经尝试删除.gitignore,但它仍然无法恢复文件。我重新设置为提交文件所在的位置和不在.gitignore中的位置,但它仍然不会恢复。

  • 1
    当您将此文件添加到.gitignore(.git忽略),您是否也将其从存储库中删除?.gitignore(.git忽略)无法控制检查内容外面的只有Git提供的内容可以添加到您的新提交中。 评论 2015年10月1日14:32
  • 在我加入之前.gitignore(.git忽略)我在大约10次提交中向git提交了它。但后来我把它包括在.gitignore(.git忽略)并承诺.gitignore(.git忽略)。直到现在我才把它取下来。在意外地从工作目录中删除文件后,我还没有进行任何提交。
    – 9月
    评论 2015年10月1日14:38
  • 然后(根据我下面的回答),你可以简单地说:git签出头--路径/to/file然后你会拿回你的文件。 评论 2015年10月1日14:40

2个答案2

重置为默认值
2

尝试具体签出文件。使用提交给你知道要包含文件,请执行以下操作

git签出<提交>--路径/to/file
5
  • 我得到一个错误:pathspec“colors”与git已知的任何文件都不匹配。错误。我使用的路径是相对于.git所在位置的。换句话说,文件位于repo的根目录中,所以我做了一个git签出<sha>--目录名。它实际上是一个目录,而不是一个文件。
    – 9月
    评论 2015年10月1日14:41
  • 除了意外删除此目录外,您的工作目录中还有其他更改吗? 评论 2015年10月1日14:45
  • 没有其他更改。一切都很干净。我试过git克隆一个新的回购,并试图校验重置但该文件不会显示,并且校验它总是给我这个错误。
    – 9月
    评论 2015年10月1日14:47
  • 等待。从头开始克隆回购(应在以下位置签出一个新的工作副本头部)没有把目录还给你吗?你确定你没有提交删除吗?什么是git日志--统计告诉你? 评论 2015年10月1日14:48
  • 我能够从更远的提交中获取文件。我仔细查看了我的git日志,我从未对目录进行过删除。事实上,我直到现在才删除它。我从一个硬备份中把丢失的部分绑起来。
    – 9月
    评论 2015年10月1日15:05
0

尝试删除.gitignore(.git忽略)文件,然后再运行命令。(或将其移出存储库)

有点像

rm.gitignore(吉特忽略)#如果重置因更改而无效,您可以添加--forcegit重置--硬<sha>
1
  • 我试了一下,但还是什么都没有。
    – 9月
    评论 2015年10月1日14:30

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览已标记的其他问题问你自己的问题.