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

如何提取Git文件历史的年份范围,便捷核对版权信息?

高效提取Git文件的版权修改年份/提交日期

我懂你这种痛点——要核对文件版权历史,一个个翻Git提交确实太折腾了!不用慌,这里有几个Git命令技巧,能直接帮你导出想要的信息,不用手动排查每一次提交:

一、直接生成文件修改年份的汇总列表

这个命令可以直接输出文件所有修改过的年份,自动去重并排序:

git log --follow --date=format:'%Y' --pretty=format:'%ad' <file-name> | sort -u

拆解一下关键参数:

  • --follow:跟踪文件重命名后的历史(如果文件改过名字,这个参数能帮你不遗漏历史记录)
  • --date=format:'%Y':只提取提交日期中的年份部分
  • --pretty=format:'%ad':让Git只输出格式化后的提交日期,去掉作者、提交信息等冗余内容
  • sort -u:对提取到的年份去重,并且按从小到大排序

执行后你会得到清晰的年份列表:

2011
2012
2013
2015
2017
2018
2020

如果想要更贴近你理想的「2011-2015、2017、2018、2020」这种紧凑格式,可以搭配一个简单的awk脚本处理结果:

git log --follow --date=format:'%Y' --pretty=format:'%ad' <file-name> | sort -u | awk '
    BEGIN { prev = ""; range_start = "" }
    {
        if (prev == "") {
            range_start = $0; prev = $0
        } else if ($0 == prev + 1) {
            prev = $0
        } else {
            if (range_start == prev) {
                printf "%s, ", range_start
            } else {
                printf "%s-%s, ", range_start, prev
            }
            range_start = $0; prev = $0
        }
    }
    END {
        if (range_start == prev) {
            print range_start
        } else {
            print range_start "-" prev
        }
    }' | sed 's/, $//'

这个脚本会自动把连续的年份合并成范围,非连续的年份单独列出,最后用sed去掉末尾多余的逗号,输出就是你想要的简洁格式。

二、提取干净的提交日期列表

如果暂时不需要年份汇总,只想得到所有提交的日期(比如2020-02-02 2018-06-06…这种),用这个命令:

git log --follow --date=format:'%Y-%m-%d' --pretty=format:'%ad' <file-name> | sort -u

把日期格式改成%Y-%m-%d后,执行会输出去重后的完整日期列表:

2011-03-15
2015-07-22
2017-01-05
2018-06-06
2020-02-02

要是想保留每一次提交的日期(包括同一日期的多次修改),去掉sort -u即可:

git log --follow --date=format:'%Y-%m-%d' --pretty=format:'%ad' <file-name>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:27:45