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

如何用GitPython获取最近提交中排除删除、重命名的修改文件路径

GitPython过滤最近提交中删除/重命名文件的实现方案

你原来通过commit.stats.files获取的变更列表会包含全类型变更的文件,要过滤删除、重命名的文件,可通过对比当前提交与父提交的diff记录实现,完整代码如下:

import os
import sys
from git import Repo

repo = Repo(os.path.dirname(sys.argv[0]))
latest_commit = list(repo.iter_commits(max_count=1))[0]

# 处理边界:如果是仓库第一次提交,没有父提交
if not latest_commit.parents:
    # 初始提交所有文件都是新增
    valid_files = latest_commit.stats.files.keys()
else:
    parent_commit = latest_commit.parents[0]
    # 对比两个提交的差异,关闭补丁生成提升效率
    diffs = latest_commit.diff(parent_commit, create_patch=False)
    valid_files = []
    for diff_item in diffs:
        # 仅保留新增、修改的文件,过滤删除(D)、重命名(R)等类型
        if diff_item.change_type in ('A', 'M'):
            valid_files.append(diff_item.b_path)

# 输出结果
for filepath in valid_files:
    print(filepath)

补充说明

  • 变更类型标识说明:
    • A:新增文件
    • M:内容修改的文件
    • D:已删除的文件(已过滤)
    • R:重命名的文件(已过滤),若需要保留重命名后的新路径,可在判断条件中新增'R',取diff_item.b_path即可
  • 如果需要保留重命名前的旧路径,可取值diff_item.a_path

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:21:01