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

如何在Git分支名称前打印对应X个月前时间戳并按日期排序

调整后的完整可运行代码

#!/bin/bash
current_timestamp=$(date +%s)
four_month_ago=$(( current_timestamp - 4*30*24*60*60 ))
# 临时存储符合条件的分支,格式为「最后提交时间戳 分支名」
temp_list=()

# 遍历远程分支,过滤HEAD指向的冗余条目
for x in $(git branch -r | grep -v '->'); do
    branch_timestamp=$(git show -s --format=%at "$x" 2>/dev/null)
    # 跳过获取时间失败的无效分支
    [[ -z $branch_timestamp ]] && continue
    if (( branch_timestamp < four_month_ago )); then
        # 去掉origin/前缀后存入数组
        temp_list+=("$branch_timestamp ${x/origin\//}")
    fi
done

# 按提交时间戳降序排序,实现越新的分支排越靠前
IFS=$'\n' sorted_list=($(sort -k1,1nr <<<"${temp_list[*]}"))
unset IFS

# 遍历输出,计算距今月数
i=0
for entry in "${sorted_list[@]}"; do
    read -r ts branch_name <<< "$entry"
    # 时间差换算为月数,取整数部分
    diff_sec=$(( current_timestamp - ts ))
    months_ago=$(( diff_sec / (30*24*60*60) ))
    printf "    %3d - %d month ago - %s\n" "$i" "$months_ago" "$branch_name"
    ((i++))
done

核心调整逻辑说明

  • 调整数组存储结构,同时保存分支最后提交时间戳和分支名,为排序和月数计算提供数据基础
  • 过滤git branch -r输出的HEAD指向冗余条目,避免无效分支导致执行报错
  • 将原有的字符串比较替换为数值比较,避免时间戳判断逻辑出错
  • 新增排序步骤,按提交时间戳降序排列,实现月数从小到大的输出顺序
  • 输出阶段新增时间差换算逻辑,将秒级时间差换算为月数后按要求格式拼接输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:06:03