仅使用git log显示sha1

Mar*_*ery 41 git bash

我想编写一个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.

  • 为什么是 `--format=format:%H` 而不仅仅是 `--format=%H` ? (2认同)

Mag*_*äck 30

另一种选择git log --formatgit rev-list管道命令.出于脚本目的,它是推荐的选择,因为可以依赖接口来保持稳定(尽管对于这样的简单用途,如果git log不够稳定,我会感到惊讶).

for sha1 in $(git rev-list HEAD) ; do
    : # Do something with $sha1
done
Run Code Online (Sandbox Code Playgroud)