【问题标题】:git add/rm files based on the type of change (of the files)基于更改类型的 git add/rm 文件(文件的)
【发布时间】: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 作为一般的 StackOverflow 规则(更多地适用于 Git 问题之外),如果您甚至没有尝试过自己的解决方案,那么您不应该发帖。 :-) 我不是一个很大的反对者,尤其是因为我倾向于回答 Git 问题,在那里可怜的新手被 Git 的巨大不可渗透性所淹没(参见 git-man-page-generator.lokaltog.net)。

标签: git git-add git-rm


【解决方案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 选项将此类文件列为删除+添加文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-28
    • 2013-07-17
    • 2023-03-16
    • 2012-09-06
    • 2012-03-20
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多