¿Cómo puedo ver la salida de `git show` en un visor de diferencias como meld, kdiff3, etc.

Hay muchas preguntas de SO que muestran cómo ver el resultado de un command de git diff en un visor de diferencias como git difftool usando git difftool o de otra manera. No estoy preguntando sobre git diff sin embargo.

Quiero ver la salida de git show <previous commit sha1> en un visor de diferencias como meld. ¿Cómo puedo hacer esto?

Puede usar git difftool para mostrar una única confirmación.

Digamos que quiere ver la confirmación con el sha1 abc123 :

 git difftool abc123~1 abc123 

( ~1 le dice a git que se mueva a la confirmación anterior, por lo que abc123~1 es la confirmación antes de abc123 )

Si usa esto regularmente, puede hacer un command personalizado de git para hacerlo más fácil:

  1. Cree un file llamado git-showtool algún lugar de su $PATH con los siguientes contenidos:

     git difftool $1~1 $1 
  2. Dale a ese file permissions de ejecución:

     chmod +x ~/path/to/git-showtool 
  3. Use el command git showtool <sha1 or tag or ...>

  4. Lucro.

Partiendo de la respuesta de georgebrock, puedes crear un alias en .gitconfig, algo como esto:

 showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1" 

Luego puede ejecutarlo con git showtool abc123 (sin necesidad de crear un script de shell separado para esto). Si omite la revisión, se seleccionará por defecto HEAD.

Traduciendo la sugerencia de Sagitario para la comprensión de less git, agréguela a su file .gitconfig global que reside en C: \ Usuarios [nombre de usuario] si usted es un usuario de Windows:

 [alias] showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1" 

o puede ejecutar el siguiente command en el shell get bash:

 git config --global alias.showtool '!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1' 

que hará el cambio al file .gitconfig por usted.

Sobre la base de la respuesta de Sagitarrian, aquí hay un pequeño cambio para una syntax de rev más genérica:

 showtool = "!showci () { rev=$(git rev-parse \"${*:-HEAD}\"); git difftool $rev~1 $rev; }; showci" 

Uso rev-parse para permitir de forma transparente las expresiones rev complejas.

Eliminé los $1 al final, ya que se llama al alias seguido de los arguments; pasa desapercibido cuando se usa solo $1 pero rompe el comportamiento $* .

Esto permite hacer cosas agradables como:

 git showtool :/some nasty bug 

La respuesta Geogrebrock está bien, pero se puede mejorar así:

 commit=$1 shift git difftool $commit~1 $commit $@ 

Ponlo en el file ejecutable (chmod + x) en algún lugar de $ PATH.

Ahora puede pasar arguments adicionales, por ejemplo, especificar qué files desea ver (e ignorar otros):

 $ git showtool 6a40ec6ffb9338b0548aefab92fded1bffb1648a -- src-cmn/