Git rm 命令详细介绍

开始使用 Git 时的一个常见问题是“我如何告诉 Git 不再跟踪一个(或多个)文件?” 。 这里 git rm 命令来解决这个问题。git rm 用于从 Git 仓库中删除文件。 它可以被认为是 git add 命令的逆操作。


git rm 概述

git rm 命令可用于删除单个文件或文件集合。 git rm 的主要功能是从 Git 索引中删除跟踪的文件。 此外, git rm 可用于从暂存索引和工作目录中删除文件。 如果该命令后面没有跟着参数,则仅从工作目录中删除文件。 正在操作的文件必须与当前 HEAD 中的文件相同。 如果文件的 HEAD 版本与暂存索引或工作树版本之间存在差异,Git 将不会进行删除。 这是一种安全机制,可防止删除正在进行的更改。

注意 - git rm 不会移除分支。


用法

<file>…

指定要删除的目标文件。选项值可以是单个文件、以空格分隔的文件列表file1 file2 file3或通配符文件 glob(~./directory/*)。

-f 或--force

-f 选项用于覆盖 Git 进行的安全检查,以确保 HEAD 中的文件与暂存索引和工作目录中的当前内容匹配。

-n 或 --dry-run

该选项是一种保护措施,它将执行 git rm 命令,但不会实际删除文件。 相反,它将输出它会删除哪些文件。

-r

-r 选项是“递归”的简写。在递归模式下操作时,git rm将删除目标目录和该目录的所有内容。

--

分隔符选项用于显式区分文件名列表和传递给git rm的参数。如果某些文件名的语法可能被误认为是其他选项,则此时该选项就显得非常有用了。

--cached

--cached选项指定仅在暂存索引上进行删除。工作目录文件将被单独保留。

--ignore-unmatch

这会导致命令以0 sigterm状态退出,即使没有匹配的文件。这是Unix级别的状态代码。代码0表示命令调用成功。在将git rm用作需要正常失败的shell脚本的一部分时,--ignore unmatch选项可能会有所帮助。

-q 或 --quiet

-q选项隐藏 git rm 命令的输出。如果不指定该选项,git rm命令通常会显示删除的每个文件,并且每一行为一个删除文件。


如何撤消git rm

git rm 不是永久更新。该命令将更新暂存索引和工作目录。 在创建新提交并将更改添加到提交历史记录之前,这些更改不会持久化。 这意味着可以使用常见的 Git 命令“撤消”此处的更改。

$ git reset HEAD

重置会将当前暂存索引和工作目录恢复到 HEAD 提交。 这样将会撤消 git rm。

$ git checkout .

签出将具有相同的效果,并从HEAD还原文件的最新版本。

如果执行了git rm 并创建了一个新的提交来持久化删除,那么可以使用git reflog来查找 git rm 执行之前的ref。


git rm 的作用域

git rm 命令仅在当前分支上运行。 删除事件仅适用于工作目录和暂存索引树。 在创建新提交之前,文件删除不会持久保存到仓库的历史提交记录中。


为什么使用 git rm 而不使用 rm

git 仓库将识别何时对其正在跟踪的文件执行了常规 shell rm 命令。 它将更新工作目录来反映删除了文件。 它不会随着删除更新暂存索引。 必须在删除的文件路径上执行额外的 git add 命令才能将更改添加到暂存索引。 git rm 命令充当快捷方式,因为它将更新工作目录和暂存索引并进行删除。


例子

$ git rm Documentation/\*.txt

此示例使用通配符文件删除所有 *.txt 文件。

注意 - 在此示例中,星号 * 用斜杠进行了转义; 这是一个防止 shell 扩展通配符的保护机制。 然后通配符扩展 Documentation/ 目录下的文件和子目录的路径名。

git rm -f git-*.sh

如何删除文件系统中不再存在的文件

正如上面所述, git rm 实际上是一个很方便的命令,它结合了标准的 shell rm 命令和 git add 从工作目录中删除文件并将该删除提交到暂存索引。 如果仅使用标准 shell rm 命令删除了多个文件,则仓库可能会进入繁琐的状态。

如果打算将所有显式删除的文件记录为下一次提交的一部分,则 git commit -a 会将所有删除事件添加到暂存索引以准备下一次提交。

但是,如果要持久删除使用 shell rm 删除的文件,请使用以下命令:

$ git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached

这个命令将从工作目录生成一个已删除文件的列表,并将该列表传输到git rm--cached,后者将更新暂存索引。

git rm 是对两个主要的 Git 内部状态管理树进行操作的命令,这两棵树分别是:工作目录和暂存索引。 git rm 用于从 Git 仓库中删除文件。 它结合了默认 shell rm 命令和 git add 的效果。 这意味着它将首先从文件系统中删除一个目标,然后将该删除事件添加到暂存索引中。 该命令是可用于撤消 Git 中的更改的众多命令之一。

查看笔记

扫码一下
查看教程更方便