Git杂谈 —— git rm

307 阅读3分钟

最近在重新把git捡起来学习一下,决定写一些文章记录一下,一来可以加深自己的印象,二来也可以和大家一起分享一下学习到的小知识。最近发现一个很好的学习git的地方不过是全英的,只能边查边看。传送门放在下面,得好好学习英语了~

Git Tutorials and Training | Atlassian Git Tutorial

git rm —— 快速删除文件并同步到暂存索引

git rm 命令可用于删除单个文件或文件集合。 git rm 的主要功能是从 Git 索引中删除跟踪的文件。 此外, git rm 可用于从暂存索引和工作目录中删除文件。 使用 git rm 操作的文件必须与当前 HEAD 中的文件相同。 如果文件的 HEAD 版本与暂存索引或工作树版本之间存在差异,Git 将阻止删除。 这是一种安全机制,可防止删除你还没有提交的更改。

为什么我要使用git rm 而不是直接rm删除文件呢

Git 仓库将识别它正在跟踪的文件被执行常规 shell rm 命令。 它将更新工作目录以同步删除操作。 但它不会将删除更新到暂存索引。 我们必须为已删除的文件执行附加的 git add 命令,以将更改添加到暂存索引。 git rm 命令作为一个快捷方式,它可以直接将更新工作目录和暂存索引合二为一。

食用方式

file

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

-f / --force

-f 选项用于忽略 Git 进行的安全检查,以确保 HEAD 中的文件与暂存索引和工作目录中的内容匹配,也就是说使用 -f / --force 选项会将你未提交的变更删除,在使用 -f / --force 确保你自己知道自己在干嘛。

-n / --dry-run

“dry run”选项是一种安全措施,可以执行 git rm 命令,但不会实际删除文件。 相反,它将输出它会删除哪些文件,如果你不确定你的命令会做出怎样的行为,你可以将你的命令组合上 -n / --dry-run 试试看。

-r

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

--

分隔符选项用于明确区分文件名列表和传递给 git rm 的参数。 如果某些文件名的名字可能被误认为其他选项,这将很有用。

--cached

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

--ignore-unmatch

使用 --ignore-unmatch 可以做到即使没有匹配的文件,也会使命令以 0 sigterm 状态退出。 这是一个 Unix 级别的状态码。 代码 0 表示命令调用成功。 当使用 git rm 作为需要优雅失败的时候, --ignore-unmatch 选项会很有帮助。

-q / --quiet

quiet 选项隐藏 git rm 命令的输出。 git rm 命令通常为删除的每个文件输出一行删除信息。

怎样撤销 git rm

执行 git rm 不是永久删除你的文件,该命令会更新暂存索引和工作目录。 在你创建新提交并将更改添加到Commit History之前,这个删除操作不会应用到Git中。 这意味着可以使用常见的 Git 命令“撤消”此处的更改。

git reset HEAD

git reset 会将当前暂存索引和工作目录恢复为 HEAD 提交。 这将撤消 git rm 的删除操作。

git checkout .

git checkout 将与 git reset 具有相同的效果并从 HEAD 恢复文件的最新版本。

gitref

即便你执行了 git rm 并创建了一个新的提交来应用删除操作,你也可以通过 git reflog 查找 git rm 执行之前的 ref,然后直接reset过去。

以上就是 git rm 的相关知识拉