You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Git两个提交间需删除与新增的文件列表(排除重命名)?

解决Git识别重命名为删旧加新的文件清单问题

我完全懂你的困扰——老旧系统的操作限制逼得你只能靠删旧文件、新增新文件来模拟重命名,但Git默认的重命名检测会把这两步合并成一条重命名记录,完全不符合你想要拆分查看的需求。下面是具体的解决办法,帮你精准提取纯删除和纯新增/更新的文件列表:

1. 提取两个提交间的删除文件列表

用git diff关闭重命名检测,同时只筛选被删除的文件:

git diff --no-renames --name-only --diff-filter=D <起始提交> <结束提交>

参数拆解:

  • --no-renames:强制Git跳过重命名检测,还原你实际执行的“删旧+加新”操作记录
  • --name-only:只输出文件名,刚好适合生成清单
  • --diff-filter=D:仅保留被删除的文件条目

2. 提取两个提交间的新增/更新文件列表

同样关闭重命名检测,筛选新增和修改过的文件:

git diff --no-renames --name-only --diff-filter=A,M <起始提交> <结束提交>

参数拆解:

  • --diff-filter=A,M:A代表新增的文件,M代表修改过的文件,组合后就能覆盖所有新增和更新的内容

3. 生成本地清单文件

如果需要把结果保存成文件方便后续使用,直接将命令输出重定向到文本文件即可:

# 生成删除文件清单
git diff --no-renames --name-only --diff-filter=D <起始提交> <结束提交> > deleted_files.txt

# 生成新增/更新文件清单
git diff --no-renames --name-only --diff-filter=A,M <起始提交> <结束提交> > added_updated_files.txt

提交参数的几种写法

你可以用以下任意方式指定<起始提交>和<结束提交>:

  • 完整的提交哈希值,比如a1b2c3d和x9y8z7w
  • 分支名,比如main和feature/rename-workaround
  • 相对引用,比如HEAD~2(当前提交的前两个版本)和HEAD(当前最新提交)

举个实际场景的例子:如果想对比当前提交和上一个提交的操作记录,命令可以写成:

git diff --no-renames --name-only --diff-filter=D HEAD~1 HEAD

这样操作后,你就能得到完全拆分的删除文件清单和新增/更新文件清单,完美匹配你在老旧系统上的实际操作流程,不会再出现Git自动合并重命名的情况。

内容的提问来源于stack exchange,提问作者Arron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:55:12