基于更改类型的 git add/rm 文件(文件的)

Posted

技术标签:

【中文标题】基于更改类型的 git add/rm 文件(文件的)【英文标题】:git add/rm files based on the type of change (of the files) 【发布时间】:2022-01-07 15:25:22 【问题描述】:

有没有办法仅根据修改类型来暂存或取消暂存 (git add / git rm) 文件?

喜欢:

仅添加/rm 已删除的文件 仅添加/rm 新文件 仅添加/rm 修改过的文件 仅添加/rm 重命名的文件

【问题讨论】:

我不认为 git 有这样做的标准方法。你可能需要写一些 bash 魔法 @evolutionxbox 好像是这样,我在 git 文档中也找不到任何有用的东西 这可能有用吗? Filter git diff by type of change --- 用这个列出文件,然后添加它们? 我注意到这里的人不喜欢没有代码的问题......这让他们感到紧张 @evolutionxbox 作为一般的 *** 规则(更多地适用于 Git 问题之外),如果您甚至没有尝试过自己的解决方案,那么您不应该发帖。 :-) 我不是一个很大的反对者,尤其是因为我倾向于回答 Git 问题,在那里可怜的新手被 Git 的巨大不可渗透性所淹没(参见 git-man-page-generator.lokaltog.net)。 【参考方案1】:

基于 other linked answer 你可以做(​​在 bash 中)

git diff --name-only --diff-filter=D | xargs git add

例如只添加已删除的文件。

您可以使用其他差异过滤器选项来修改、新建、重命名文件等。当然,您可以将git add 替换为git reset 等。

--diff-filter=[ACDMRTUXB*]

仅选择以下文件

A 已添加 C已复制 D已删除 M已修改 R改名 T 改变了他们的类型(模式) U未合并 X未知 B 的配对已损坏 * 全有或全无

可以使用过滤字符的任意组合。

【讨论】:

但是这在我的 Linux 终端上有效,xargs 在 Windows 终端中是未知参数。【参考方案2】:

Steven Fontanella 给出了大部分答案:git diff --diff-filter 将允许您列出已被 git 跟踪或已被 git added 跟踪的文件。

要列出磁盘上尚未添加的文件,您需要使用git ls-files

git ls-files --exclude-standard -o

此外,对于文件git 检测到重命名的情况,您将需要处理 git diff 的特定输出,或使用 --no-renames 选项将此类文件列为删除+添加文件。

【讨论】:

以上是关于基于更改类型的 git add/rm 文件(文件的)的主要内容,如果未能解决你的问题,请参考以下文章

git status:啥是 UU,为啥要 add/rm 修复它?

痞子衡嵌入式:第一本Git命令教程- 转移(add/rm/mv)

痞子衡嵌入式:第一本Git命令教程- 编辑(status/add/rm/mv)

使用 git 查看对特定文件的更改

按文件类型拆分 git 分支或提交

在 Git 中查找更改最多的文件