如何在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
相关产品推荐
相关产品推荐

