Además de escribir un alias o script, ¿hay un comando más corto para obtener la diferencia para un commit en particular?
git diff 15dc8^..15dc8
Si solo le da la identificación de confirmación única git diff 15dc8
, difiere esa confirmación contra HEAD.
Respuestas:
Uso
git show $COMMIT
. Le mostrará el mensaje de registro para la confirmación y la diferencia de esa confirmación en particular.fuente
Utilizar:
como se describe en el siguiente fragmento de la página de manual de git-rev-parse (1) (o en la página de manual moderna de git gitrevisions (7) ):
Esto significa que puede usarlo
15dc8^!
como abreviatura para15dc8^..15dc8
cualquier lugar en git donde se necesiten revisiones. Para el comando diffgit diff 15dc8^..15dc8
se entiende comogit diff 15dc8^ 15dc8
, lo que significa la diferencia entre padre de commit (15dc8^
) y commit (15dc8
).Nota : la descripción en la página de
git-rev-parse(1)
manual habla sobre los rangos de revisión , donde debe funcionar también para los commits de fusión, con más de un padre. Entoncesr1^!
es "r1 --not r1^@
" es decir "r1 ^r1^1 ^r1^2 ...
"Además, puede usar
git show COMMIT
para obtener una descripción de compromiso y diff para un compromiso. Si solo quieres diff, puedes usargit diff-tree -p COMMIT
fuente
^!
notación abreviada principal funciona correctamente con difftool para los commits normales, pero el diff se invierte para los commits de fusión. ¿Porque?Si sabe cuánto tiempo atrás, puede intentar algo como:
Los compromisos previos funcionan más o menos así:
Hay muchas formas de especificar confirmaciones:
Vea esta página para más detalles .
fuente
Como señala @mipadi, puede usar
git show $COMMIT
, pero esto también muestra algunos encabezados y el mensaje de confirmación. Si quieres una diferencia directa, usagit show --pretty=format:%b $COMMIT
.Obviamente, esta no es una mano muy corta, así que mantengo este alias en mi .gitconfig
Esto me permite usar
git sd $COMMIT
para mostrar diff .fuente
Muchos de los ejemplos mencionados (p
git diff 15dc8^!
. Ej. , Ogit diff 15dc8^..15dc8
) no funcionan si está usando zsh y tiene unaextendedglob
opción establecida. Puede solucionarlo de una de las siguientes tres maneras:unsetopt extendedglob
(y / o eliminarlo de .zshrc)setopt NO_NOMATCH
(y / o configurarlo en .zshrc)escapar del caos y golpear cada vez con una barra diagonal inversa, por ejemplo
git diff 15dc8\^\!
fuente
~ 1 significa 'padre', ~ 2 'abuelo, etc.
fuente
La solución anterior de Paul hizo lo que esperaba.
Además, es útil agregar alias como las placas mencionadas, si coloca lo siguiente en la sección [alias] de su archivo ~ / .gitconfig, puede usar la mano corta para ver la diferencia entre head y anterior.
Luego, ejecutando $ git diff-last obtendrás tu resultado. Tenga en cuenta que esto también incluirá cualquier cambio que aún no haya confirmado, así como la diferencia entre confirmaciones. Si desea ignorar los cambios que aún no ha confirmado, puede usar diff para comparar el HEAD con su padre directamente:
fuente
Utiliza alias, por lo que no responde su pregunta exactamente, pero me parece útil para hacer lo que pretende ...
fuente