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

如果要将所有删除的文件记录为下一次提交的组件,执行 git commit -a 命令,所有删除事件都会添加到暂存索引中,为下一次提交做准备。

但是,如果我们想连续删除所有已被 shell rm 删除的文件,请使用以下命令,该命令将从工作目录中创建所有已删除文件的列表,并将其通过管道传输到 git rm --cached 以更新分期指数:

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

git rm 命令说明

git rm 命令从 Git 存储库中删除特定文件或者一组文件。
git rm 的主要功能是从索引中删除跟踪文件。
git rm 也可用于从暂存索引和工作目录中删除文件。
但是不能仅从工作目录中删除文件。
应该提到的是 git rm 命令不会删除分支。

git rm

git rm 命令的使用

<file>…指定要删除的文件。
-f--force覆盖安全检查,以确保头部中的文件对应于分期索引和工作目录的内容。
-n --dry-run执行git rm命令,但实际上它也没有删除文件。它只输出它将删除的文件。
-r这是'递归'的速记。在递归模式下工作时,Git RM会删除目标目录及其整个内容。
--在文件名列表和转接到GIT RM的参数之间进行清晰区分。
--cached指定仅在临时索引上发生删除。工作目录文件单独留下。
--ignore-unmatch即使没有匹配文件,也可以退出0状态。它是一个UNIX级别状态代码。
-q--quiet隐藏git rm命令的输出。 Git RM命令通常为每个删除的文件输出一行。

撤消 git rm

git rm 命令更新暂存索引和工作目录。
在创建新提交之前,这些修改不会被持久化。
修改被添加到提交历史中,这意味着它们可以用 git 命令撤消。
以下命令用于撤消 git rm。
它将当前暂存索引和工作目录恢复到 HEAD 提交。

git reset HEAD
git checkout .

在执行 git rm 之前使用 git reflog 查找引用,以防 git rm 运行并创建一个新的提交来保持删除。

例子

让我们考虑以下示例:

git rm folder/\*.txt

我们使用通配符文件 glob 删除所有 *.txt 文件。
这些文件是文件夹目录及其子目录的子文件。
我们在星号前加上斜线以防止 shell 扩展通配符。
然后通配符扩展文件和子目录的路径名。

git rm -f git-*.sh

示例中使用 force 选项从工作目录和暂存索引中删除目标文件。

Git rm 与 rmb比较

当对正在跟踪的文件执行普通 shell rm 命令时,Git 存储库会识别它并仅更新工作目录以反映删除。

要将修改添加到暂存索引,也必须执行 git add 命令。
git rm 命令通过删除更新暂存索引和工作目录。

日期:2020-06-02 22:16:34 来源:oir作者:oir