基于更改类型的 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 add
ed 跟踪的文件。
要列出磁盘上尚未添加的文件,您需要使用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)