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

如何用Python获取Git仓库的最新及次新Commit ID

在Python中获取Git仓库的最新和次新Commit ID

没问题,要在Python里实现你想要的功能(获取最新和次新提交的Commit ID),有两种实用方案,完全对应你熟悉的Git命令逻辑,我给你详细拆解下:

方案1:直接调用Git命令(无需额外依赖)

如果你不想安装第三方库,用Python内置的subprocess模块直接执行你已经验证过的Git命令就可以,代码直观又省心:

import subprocess

def get_git_commits(repo_path="."):
    # 获取最新提交ID(对应 git rev-parse @)
    latest_commit = subprocess.check_output(
        ["git", "rev-parse", "@"],
        cwd=repo_path,
        text=True
    ).strip()
    
    # 获取次新提交ID(对应 git rev-parse @~)
    second_latest_commit = subprocess.check_output(
        ["git", "rev-parse", "@~"],
        cwd=repo_path,
        text=True
    ).strip()
    
    return latest_commit, second_latest_commit

# 调用示例
latest, second_latest = get_git_commits()
print(f"最新Commit ID: {latest}")
print(f"次新Commit ID: {second_latest}")

小提示:

  • cwd=repo_path可以指定Git仓库的路径,如果脚本就在仓库根目录下,用默认的.就行;
  • text=True让输出直接是字符串,省去手动解码的步骤;
  • strip()用来去除输出结果里的换行符,保证拿到的是纯净的Commit ID。

方案2:使用GitPython库(更Pythonic的方式)

如果你的项目经常和Git交互,推荐用专门的GitPython库,它封装了Git的各种操作,代码更易读、更易维护:

首先安装依赖:

pip install gitpython

然后编写代码:

from git import Repo
from git.exc import InvalidGitRepositoryError

def get_git_commits(repo_path="."):
    try:
        repo = Repo(repo_path)
    except InvalidGitRepositoryError:
        raise ValueError(f"指定路径 {repo_path} 不是有效的Git仓库")
    
    # 最新提交ID
    latest_commit = repo.head.commit.hexsha
    
    # 次新提交ID:取最新提交的第一个父提交
    if repo.head.commit.parents:
        second_latest_commit = repo.head.commit.parents[0].hexsha
    else:
        # 处理仓库只有一个提交的边界情况
        second_latest_commit = None
        print("警告:仓库只有一个提交,没有次新Commit ID")
    
    return latest_commit, second_latest_commit

# 调用示例
latest, second_latest = get_git_commits()
print(f"最新Commit ID: {latest}")
if second_latest:
    print(f"次新Commit ID: {second_latest}")

小提示:

  • repo.head.commit对应Git里的HEAD,也就是最新提交;
  • parents[0]就是这个提交的父提交,完美对应@~的逻辑;
  • 增加了异常处理,避免传入非Git仓库路径导致报错,还处理了仓库只有单个提交的边界情况。

两种方案都能得到你用git rev-parse命令拿到的结果,你可以根据自己的项目需求选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:34:32