Mostrar sha1 solo con git log

Quiero escribir un script Bash que pase por encima de los sha1s de los commits generados por una invocación del git log . Sin embargo, git log me da mucho más salida de la que quiero:

 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. 

¿Cómo puedo hacer que git log solo genere sha1s para que pueda recorrerlos cómodamente?

Una alternativa a git log --format es el command git rev-list plomería. Para fines de scripting, es la opción recomendada, ya que se puede confiar en que la interfaz será estable (aunque para usos simples como este, me sorprendería que git log no sea lo suficientemente estable).

 for sha1 in $(git rev-list HEAD) ; do : # Do something with $sha1 done 

Puede usar el argumento --format con un formatting personalizado que solo incluye el sha1:

 git log --format=format:%H 

El command anterior produce resultados como los siguientes:

 0375602ba2017ba8750a58e934b41153faee6fcb 4390ee9f4428c84bdbeb2fed0a461099a6c81b39 bff53bfbc56485c4c1007b0884bb1c0d61a1cf71 

Puede recorrer los hashes de confirmación en Bash de esta manera:

 for sha1 in $(git log --format=format:%H); do : # Do something with $sha1 done 

Esto es un poco más detallado que usar git rev-list , pero puede ser su única opción si desea usar arguments de order o filtrado para git log que no son compatibles con git rev-list , como -S .