如何从 grep 输出中获取提交

How to grab commit from grep output

假设我在 git 存储库中调用以下命令:

git log --oneline -n 10 | grep pattern

它给了我以下输出:

c95383f asdfasdf pattern
3e34762 asdfasdfsd pattern

我如何才能只从第二行获取提交哈希,以便我可以将其通过管道传输到另一个命令中?

这个可以考虑awk:

git log --oneline -n 10 | awk '/pattern/ {print }'

其中 /pattern/ 在一行中匹配 pattern,而 {print } 打印匹配行的第一个字段。

我的朋友刚刚给我看了这个:

git log --oneline -n 10 | grep pattern | awk 'END{print }'

但我很想知道是否有人有任何不同的解决方案。

对于打印的提交(在本例中为 10),打印匹配 pattern:

最旧提交的哈希
git log --oneline -n 10 |
awk '[=10=] ~ /pattern/ {hash = } END {print hash}'

相同,但第 N 个最新

git log --oneline -n 10 |
awk '[=11=] ~ /pattern/ && ++c==N {print }'

(使用 1 表示最新的,或使用 2 表示第二个最新的,等等,在此示例中 N 必须 <= 10)

打印第 N 个最新提交的散列(无模式):

git log --oneline -n N |
awk 'END {print }'

git log --oneline |
awk 'NR==N {print }'

请记住,git log 有选项 --since--after--until--before,它们将日期作为输入。