如何获取2022年6月1日后每日10点至13点的Git日志?
问题根因
- Git里
--since和--after是完全等价的参数别名,作用都是筛选提交时间晚于指定值的记录;--until和--before是另一组等价别名,作用是筛选提交时间早于指定值的记录。 - 同一语义的参数多次传值时,Git会直接用最后传入的值覆盖前面的配置。你写的命令中
--since=10am会被后面的--after=2022-06-01覆盖,实际执行时仅保留了「2022年6月1日之后提交」的过滤规则,时段限制完全失效,自然会返回所有符合日期要求的日志。 - 额外说明:你之前能正常获取当日10-13点日志,是因为不带日期前缀的
10am/13pm默认会被解析为当前日期的对应时间点,本身就无法跨天匹配历史日期的同时段提交。
正确实现命令
Git原生的时间过滤仅支持绝对/相对时间点筛选,不支持跨日期匹配每日固定时段的规则,需要结合文本过滤实现需求,命令如下:
git log --oneline --after=2022-06-01 --format="%ci %h %s" | awk '$2 >= "10:00:00" && $2 <= "13:00:00" {print $3, substr($0, index($0,$4))}'
命令逻辑说明:
- 先用
--after=2022-06-01过滤掉2022年6月1日之前的提交,减少后续处理的数据量 --format="%ci %h %s"会按固定格式输出每个提交的提交时间(标准格式含年月日、时分秒、时区)、短提交哈希、提交说明- awk部分会提取每行的时分秒字段,判断是否落在10:00:00-13:00:00区间内,符合条件的条目会输出和
--oneline一致的「短哈希+提交说明」格式 - 如果需要按作者提交时间而非提交入库时间筛选,把参数里的
%ci替换为%ai即可。
内容的提问来源于stack exchange,提问作者Joe199382
相关产品推荐
相关产品推荐

