我想编写一个Bash脚本,通过调用来循环提交输出的sha1 git log.但是,git log给我的输出比我想要的多得多:
commit 0375602ba2017ba8750a58e934b41153faee6fcb
Author: Mark Amery <markamery@notmyrealemail.com>
Date: Wed Jan 1 21:35:07 2014 +0000
Yet another commit message
This one even has newlines.
commit 4390ee9f4428c84bdbeb2fed0a461099a6c81b39
Author: Mark Amery <markamery@notmyrealemail.com>
Date: Wed Jan 1 21:30:19 2014 +0000
Second commit message.
commit bff53bfbc56485c4c1007b0884bb1c0d61a1cf71
Author: Mark Amery <markamery@notmyrealemail.com>
Date: Wed Jan 1 21:28:27 2014 +0000
First commit message.
Run Code Online (Sandbox Code Playgroud)
我怎样才能git log输出sha1s以便我可以方便地循环它们?
Mar*_*ery 73
您可以使用仅包含sha1 --format的自定义格式的参数:
git log --format=format:%H
Run Code Online (Sandbox Code Playgroud)
上面的命令产生如下输出:
0375602ba2017ba8750a58e934b41153faee6fcb
4390ee9f4428c84bdbeb2fed0a461099a6c81b39
bff53bfbc56485c4c1007b0884bb1c0d61a1cf71
Run Code Online (Sandbox Code Playgroud)
您可以在Bash中循环提交哈希,如下所示:
for sha1 in $(git log --format=format:%H); do
: # Do something with $sha1
done
Run Code Online (Sandbox Code Playgroud)
这比使用git rev-list稍微冗长,但如果您想使用git log不受支持的排序或过滤参数,则可能是您唯一的选择git rev-list,例如-S.
Mag*_*äck 30
另一种选择git log --format是git rev-list管道命令.出于脚本目的,它是推荐的选择,因为可以依赖接口来保持稳定(尽管对于这样的简单用途,如果git log不够稳定,我会感到惊讶).
for sha1 in $(git rev-list HEAD) ; do
: # Do something with $sha1
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15685 次 |
| 最近记录: |