practices - git tag remove
¿Cómo diferenciarse con su padre? (8)
Como @mipadi señala, puedes usar git show $COMMIT
, pero esto también muestra algunos encabezados y el mensaje de confirmación. Si desea una diferencia directa, use git show --pretty=format:%b $COMMIT
.
Obviamente, no es una mano muy corta, así que mantengo este alias en mi .gitconfig
[alias]
sd = show --pretty=format:%b
Esto me permite usar git sd $COMMIT
para mostrar diff .
Además de escribir un alias o script, ¿hay un comando más corto para obtener el diff para un compromiso en particular?
git diff 15dc8^..15dc8
Si solo da el ID de confirmación único git diff 15dc8
, git diff 15dc8
ese compromiso contra HEAD.
La solución de Paul de arriba hizo lo que yo esperaba.
$ git diff HEAD^1
Además, es útil agregar alias como las planchas mencionadas, si coloca lo siguiente en la sección [alias] de su archivo ~ / .gitconfig, puede usar la mano corta para ver la diferencia entre el encabezado y el anterior.
[alias]
diff-last = diff HEAD^1
Luego, ejecutar $ git diff-last te dará 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 realizado, puede usar diff para comparar la HEAD con su padre directamente:
$ git diff HEAD^1 HEAD
Muchos de los ejemplos mencionados (por ejemplo, git diff 15dc8^!
O git diff 15dc8^..15dc8
) no funcionan si está usando zsh y tiene configurada la opción extendedglob
. Puedes arreglarlo de una de las siguientes tres formas:
unsetopt extendedglob
(y / o eliminarlo de .zshrc)setopt NO_NOMATCH
(y / o configurarlo en .zshrc)escape del caret y bang cada vez con una barra invertida, por ejemplo,
git diff 15dc8/^/!
Si sabes a qué distancia, puedes probar algo como:
# Current branch vs. parent
git diff HEAD^ HEAD
# Current branch, diff between commits 2 and 3 times back
git diff HEAD~3 HEAD~2
El trabajo anterior compromete algo como esto:
# Parent of HEAD
git show HEAD^1
# Grandparent
git show HEAD^2
Hay muchas maneras en que puede especificar confirmaciones:
# Great grandparent
git show HEAD~3
Vea git-rev-parse(1) .
Utilice git show $COMMIT
. Le mostrará el mensaje de registro de la confirmación y la diferencia de esa confirmación en particular.
Utiliza alias, así que no responde exactamente a su pregunta, pero me parece útil para hacer lo que pretende ...
alias gitdiff-1="git log --reverse|grep commit|cut -d '' '' -f2|tail -n 2|head -n 2|xargs echo|sed -e ''s//s/../''|xargs -n 1 git diff"
alias gitdiff-2="git log --reverse|grep commit|cut -d '' '' -f2|tail -n 3|head -n 2|xargs echo|sed -e ''s//s/../''|xargs -n 1 git diff"
alias gitdiff-3="git log --reverse|grep commit|cut -d '' '' -f2|tail -n 4|head -n 2|xargs echo|sed -e ''s//s/../''|xargs -n 1 git diff"
alias gitlog-1="git log --reverse|grep commit|cut -d '' '' -f2|tail -n 2|head -n 2|xargs echo|sed -e ''s//s/../''|xargs -n 1 git log --summary"
alias gitlog-2="git log --reverse|grep commit|cut -d '' '' -f2|tail -n 3|head -n 2|xargs echo|sed -e ''s//s/../''|xargs -n 1 git log --summary"
alias gitlog-3="git log --reverse|grep commit|cut -d '' '' -f2|tail -n 4|head -n 2|xargs echo|sed -e ''s//s/../''|xargs -n 1 git log --summary"
Utilizar:
git diff 15dc8^!
como se describe en el siguiente fragmento de la página de git-rev-parse(1) de git-rev-parse(1) (o en la página de gitrevisions(7) moderna):
Existen otros dos métodos abreviados para nombrar un conjunto formado por una confirmación y sus confirmaciones principales. La notación r1 ^ @ significa todos los padres de r1. r1 ^! Incluye commit r1 pero excluye a todos sus padres.
Esto significa que puedes usar 15dc8^!
como una abreviatura de 15dc8^..15dc8
en cualquier lugar de git donde se necesiten revisiones. Para el comando diff, git diff 15dc8^..15dc8
se entiende como git diff 15dc8^ 15dc8
, lo que significa la diferencia entre el padre de commit ( 15dc8^
) y commit ( 15dc8
).
Nota : la descripción en la página de git-rev-parse(1)
habla sobre los rangos de revisión, donde también debe funcionar para las confirmaciones de combinación, con más de un padre. Entonces r1^!
es " r1 --not r1^@
", es decir " r1 ^r1^1 ^r1^2 ...
"
Además, puede usar git show COMMIT
para obtener la descripción de la confirmación y la diferencia para una confirmación. Si solo quieres diff, puedes usar git diff-tree -p COMMIT
git diff 15dc8 15dce~1
~ 1 significa ''padre'', ~ 2 ''abuelo, etc.