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

如何筛选近2个月未合并至main的Git分支并保留排序?

Git分支筛选与排序技巧

你已经知道用以下命令按提交日期排序并格式化输出远程分支:

git for-each-ref --sort='-committerdate:iso8601' --format='%(committerdate:relative)|%(refname:short)|%(committername)' refs/remotes/ | column -s '|' -t

现在需要实现两个核心需求:

  • 过滤掉已合并到main的分支
  • 仅保留近2个月内有更新的分支(可选:只要authordate/committerdate/creatordate/taggerdate任意一个日期符合条件就保留)
    同时希望保留按日期排序的能力。

一、过滤已合并到main的分支

直接用--no-merged=main参数即可,整合到原有命令里:

git for-each-ref --no-merged=main --sort='-committerdate:iso8601' --format='%(committerdate:relative)|%(refname:short)|%(committername)' refs/remotes/ | column -s '|' -t

该命令仅显示未合并到main的远程分支,同时保持原有的排序和格式输出。

二、按日期筛选(仅保留近2个月的分支)

借助Git的%(if)条件判断结合UNIX时间戳实现日期筛选:

  1. 先计算近2个月的时间戳(以秒为单位):
two_months_ago=$(date -d "-2 months" +%s)
  1. 结合条件判断筛选符合要求的分支:
git for-each-ref --no-merged=main --sort='-committerdate:iso8601' --format="%(if:gte=$two_months_ago)%(committerdate:unix)%(then)%(committerdate:relative)|%(refname:short)|%(committername)%(end)" refs/remotes/ | grep -v '^$' | column -s '|' -t
  • %(if:gte=$two_months_ago)%(committerdate:unix):判断分支提交日期的时间戳是否大于等于2个月前的时间戳
  • %(then)...%(end):符合条件时输出指定格式内容,不符合则输出空行
  • grep -v '^$':过滤掉空行,仅保留有效分支内容

三、多日期字段判断(任意一个日期近2个月即保留)

如果需要只要authordate/committerdate/creatordate/taggerdate中任意一个日期在近2个月内就保留分支,可使用多条件逻辑或(||):

git for-each-ref --no-merged=main --sort='-committerdate:iso8601' --format="%(if:or,gte=$two_months_ago:%(authordate:unix),gte=$two_months_ago:%(committerdate:unix),gte=$two_months_ago:%(creatordate:unix),gte=$two_months_ago:%(taggerdate:unix))%(then)%(committerdate:relative)|%(refname:short)|%(committername)%(end)" refs/remotes/ | grep -v '^$' | column -s '|' -t
  • %(if:or,条件1,条件2,...):只要其中一个条件满足就输出分支内容
  • 每个条件用于判断对应日期字段的时间戳是否在近2个月范围内

整合优化

可将时间戳计算与命令整合为一行,省去单独赋值步骤:

git for-each-ref --no-merged=main --sort='-committerdate:iso8601' --format="%(if:gte=$(date -d "-2 months" +%s))%(committerdate:unix)%(then)%(committerdate:relative)|%(refname:short)|%(committername)%(end)" refs/remotes/ | grep -v '^$' | column -s '|' -t

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:06:24