【问题标题】:git rm -r removed "ignored" files. how can I get them back using git?git rm -r 删除了“忽略”的文件。如何使用 git 找回它们?
【发布时间】:2018-06-25 20:32:11
【问题描述】:

编辑:我能够从垃圾箱中恢复我的文件,所以我不需要解决方案,但我很想知道如何使用 git 进行恢复(因为它造成了问题)以及为什么任何 git 操作都会影响“忽略”的文件。

我有一个带有以下条目的 .gitignore:

reference/ 

这是一个文件夹,我的项目中有许多大型参考数据文件。

我做了一个

git rm -r 

这些文件被删除了

我没有意识到它们已经消失了,为了找回所有东西,我使用 github 客户端“放弃所有更改...”

现在一切都回来了,除了那些被“忽略”的文件。

我的操作系统是 OSX High Sierra。

我怎样才能找回它们?

【问题讨论】:

  • 听起来你遇到了 git 非常聪明和漂亮,但不是魔法的部分。当你删除一个没有被 git 记录的文件时(因为你告诉它不要这样做),它无法通过 git 恢复它。您可以自行维护未跟踪的文件。
  • 如果我告诉 git 删除文件,它不应该删除我之前告诉它忽略的文件。它应该忽略它们。破坏性操作的不对称处理没有什么聪明或漂亮的。这与聪明和美丽相反。
  • git-rm - Remove files from the working tree and from the index。您可以将忽略的文件添加到提交中,因此git rm 必须能够处理它们。如果您不想删除文件,请不要使用包含 rm -r 的任何内容。

标签: git github rm


【解决方案1】:
$git rm --help

姓名
git-rm - 从工作树和索引中删除文件

概要
git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] ...

描述
从索引中删除文件,或者从工作树和索引中删除文件。 git rm 不会从您的工作目录中删除文件。(有 无法仅从工作树中删除文件并将其保留在索引中;如果你想这样做,请使用 /bin/rm。)文件是 删除必须与分支的尖端相同,并且不能在索引中暂存对其内容的更新,尽管默认 可以使用 -f 选项覆盖行为。当给出 --cached 时,暂存的内容必须匹配分支的尖端或文件 在磁盘上,允许从索引中删除文件。

因此,当您使用 git rm 删除文件时,这些文件已经在索引中或历史记录中。否则 git 不会删除它们。

你不能责怪 git 按你说的去做。


回答你的问题:

  • 如果文件已在索引中(但尚未提交),您将丢失。 git 帮不上忙。

  • 如果您的文件已经提交,您可以从之前的提交中签出:

    git checkout HEAD^ path/to/deleted/file
    

    这将再次自动将它们添加到索引中,因此您必须使用

    index only 中删除它们
    git rm --cached path/to/deleted/file
    

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 2015-11-30
    • 2023-03-09
    • 2018-08-27
    • 2011-02-12
    • 1970-01-01
    • 2016-05-02
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多