git-rm(1)手册页

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

概要
git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [ - ] <file> ...
描述
从索引中删除文件,或从工作树和索引中删除文件。 git rm不会从你的工作目录中删除一个文件。 (没有选择只从工作树中删除一个文件,而是将它保留在索引中;如果你想这样做,可以使用/ bin / rm。)被删除的文件必须与分支端相同,并且不会更新其内容,但可以使用-f选项覆盖默认行为。当给定缓存时,分阶段内容必须匹配分支的顶端或磁盘上的文件,从而允许从索引中删除文件。


OPTIONS
<file>…​
要删除的文件。可以使用Fileglobs(例如* .c)来删除所有匹配的文件。如果你想让Git扩展文件全局字符,你可能需要shell来逃避它们。可以给出一个主要的目录名称(例如删除dir / file1和dir / file2的目录)以删除目录中的所有文件,并递归地删除所有子目录,但是这需要明确给出-r选项。

-f--force覆盖最新的检查。

-n--dry-run切勿删除任何文件。相反,只需显示它们是否存在于索引中,否则将被命令删除。

-r
当给出主目录名时允许递归删除。

- -
此选项可用于将命令行选项与文件列表分开,(当文件名可能被误认为是命令行选项时很有用)。

--cached
使用此选项可以取消仅从索引中删除路径的情况。工作树文件,无论是否修改,都将被单独保留。

--ignore-unmatch
即使没有匹配的文件,也可以用零状态退出。

-q--quietgit rm通常会为每个删除的文件输出一行(以rm命令的形式)。该选项禁止输出。

讨论
给该命令的<file>列表可以是精确的路径名,文件全局模​​式或主目录名。该命令仅删除Git已知的路径。给出你没有告诉Git的文件的名称不会删除该文件。

跨越目录边界的文件匹配匹配。因此,给定两个目录d和d2,使用git rm'd *'和git rm'd / *'是有区别的,因为前者也将删除所有目录d2。

删除FILESYSTEM中消失的文件
没有选项让git rm只从索引中删除从文件系统中消失的路径。但是,根据使用情况,有几种方法可以完成。

使用“git commit -a”
如果你打算你的下一次提交应该记录工作树中被跟踪文件的所有修改,并记录已经用rm(而不是git rm)从工作树中删除的文件的所有删除,请使用git commit -a,因为它会自动通知并记录所有的清除。你也可以通过使用git add -u来实现类似的效果。

使用“git add -A”
在为供应商分支接受新代码时,您可能需要记录路径的删除和新路径的添加以及现有路径的修改。

通常,您将首先使用以下命令从工作树中删除所有跟踪的文件:

git ls-files -z | xargs -0 rm -f
然后解压缩工作树中的新代码。或者,您可以将更改rsync同步到工作树中。

之后,在工作树中记录所有删除,添加和修改的最简单方法是:


其他方法
如果你真正想做的就是从索引中移除工作树中不再存在的文件(可能是因为你的工作树很脏,所以你不能使用git commit -a),请使用以下命令:


git diff --name-only --diff-filter = D -z | xargs -0 git rm - 缓存
子模
只有使用gitfile的子模块(意味着它们被克隆为Git 1.7.8或更高版本)将从工作树中移除,因为它们的存储库位于超级项目的.git目录中。如果子模块(或其中嵌套的模块之一)仍然使用.git目录,则git rm会将子模块git目录移动到超级项目git目录中以保护子模块的历史记录。如果存在子模块,gitmodules(5)文件中的<name>部分也将被删除,并且该文件将被暂存(除非使用--cached或-n)。

当HEAD与索引中记录的相同时,子模块被认为是最新的,没有跟踪的文件被修改,并且子模块工作树中不存在未被忽略的未跟踪文件。忽略的文件被认为是可消耗的,并且不会阻止子模块的工作树被移除。

如果您只想从工作树中删除子模块的本地签出而不进行删除,请改为使用git-submodule(1)deinit。另请参阅gitsubmodules(7)了解详情

例子
git rm Documentation / \ *。txt
从索引中删除文档目录及其任何子目录下的所有* .txt文件。


请注意,在本例中,星号*是从shell引用的; 这让Git(而不是shell)能够扩展Documentation /目录下的文件和子目录的路径名。


git rm -f git - *。sh
因为这个例子让shell扩展了星号(即你明确列出了这些文件),所以它不会删除subdir / git-foo.sh。


BUGS
每次超级项目更新移除已填充的子模块时(例如,在移除之前和之后在提交之间切换时)旧的子模块签出将保留在旧位置。 删除旧目录只有在使用gitfile时才是安全的,否则子模块的历史记录也会被删除。 执行递归子模块更新时,此步骤将会过时。



猜你喜欢

转载自blog.csdn.net/xinqingwuji/article/details/80418881