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

如何使用jGit生成与git log格式一致的标准提交日志

jGit 实现原生git log格式输出方案

你可以通过拼接RevCommit对象的多个属性,输出和原生git log完全一致的格式,具体实现如下:

核心字段获取对应方法

你需要从RevCommit实例中获取以下几个核心字段:

  • 提交完整哈希:调用commit.getName()方法直接获取
  • 作者信息:通过commit.getAuthorIdent()方法拿到身份对象,再分别调用getName()、getEmailAddress()获取用户名和邮箱
  • 提交时间:同样从commit.getAuthorIdent().getWhen()拿到时间对象,需要按git log默认格式做格式化
  • 提交内容:直接用你已经知道的commit.getFullMessage(),只要给每行行首加4个空格缩进即可

格式化代码示例

import org.eclipse.jgit.revwalk.RevCommit;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class GitLogFormatter {
    // 匹配git log原生时间格式,指定英文Locale避免月份/星期本地化
    private static final SimpleDateFormat GIT_LOG_DATE_FORMAT = 
        new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy Z", Locale.ENGLISH);

    public static String formatCommit(RevCommit commit) {
        StringBuilder logBuilder = new StringBuilder();
        // 拼接提交哈希行
        logBuilder.append("commit ").append(commit.getName()).append("\n");
        // 拼接作者行
        logBuilder.append("Author: ")
                  .append(commit.getAuthorIdent().getName())
                  .append(" <")
                  .append(commit.getAuthorIdent().getEmailAddress())
                  .append(">\n");
        // 拼接时间行
        logBuilder.append("Date:   ")
                  .append(GIT_LOG_DATE_FORMAT.format(commit.getAuthorIdent().getWhen()))
                  .append("\n");
        // 空一行和提交内容分隔
        logBuilder.append("\n");
        // 提交内容每行前加4个空格
        String[] msgLines = commit.getFullMessage().split("\\R");
        for (String line : msgLines) {
            logBuilder.append("    ").append(line).append("\n");
        }
        return logBuilder.toString();
    }
}

如果需要输出和示例完全一致的完整日志,只需要遍历所有提交的格式化结果,在最开头加一行$ git log再加两个换行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:27:01