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

如何从git log --oneline --graph输出中提取提交哈希值?

从git log --graph --oneline输出中提取提交哈希值

先看git log --oneline --graph的典型输出:

*   7e5dbb0 Merge
|\
| * c873a96 My
| * f5817ba Amazing
* | f6a34ac Feature
|/
* f5a51ce Other stuff

你尝试的sed命令失效,核心原因是sed默认使用基础正则表达式(BRE),此时括号()属于普通字符,无法作为捕获组使用,要么转义括号,要么启用扩展正则表达式。下面是几种可行的实现方法:

方法1:修正sed命令

方式A(启用扩展正则)

直接用-E参数开启扩展正则,无需转义括号:

git log --graph --oneline | sed -E 's/[^a-f0-9]*([a-f0-9]+).*/\1/'

方式B(基础正则转义括号)

如果不想启用扩展正则,把捕获组的括号转义即可:

git log --graph --oneline | sed 's/[^a-f0-9]*\([a-f0-9]*\).*/\1/'

两种方式都会自动过滤无哈希值的行(比如|\、|/这类),只输出哈希字符串。

方法2:用grep提取

利用grep的-o参数仅输出匹配内容,结合正则精准定位哈希:

git log --graph --oneline | grep -o '[a-f0-9]\{7\}'

这里\{7\}匹配git默认的7位短哈希,如果需要提取完整40位哈希,改成[a-f0-9]\{40\}即可。

方法3:用awk提取

awk可以按字段遍历匹配,直接定位哈希字段:

git log --graph --oneline | awk '/[a-f0-9]{7}/{print $2}'

如果哈希字段位置不固定,也可以遍历所有字段匹配:

git log --graph --oneline | awk '{for(i=1;i<=NF;i++) if($i ~ /^[a-f0-9]{7}$/) print $i}'

内容的提问来源于stack exchange,提问作者Net-worker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:04:56