pendientes - ver cambios en un archivo git
¿Cómo muestro los cambios que se han realizado? (13)
Realicé algunos cambios para comprometerme; ¿Cómo puedo ver la diferencia de todos los archivos que se almacenan para la próxima confirmación? Soy consciente del estado de git , pero me gustaría ver las diferencias reales, no solo los nombres de los archivos que están en escena.
Vi que la página del manual de git-diff(1) dice
git diff [--opciones] [-] […]
Este formulario es para ver los cambios que realizó en relación con el índice (área de preparación para la próxima confirmación). En otras palabras, las diferencias son lo que podría decirle a git que agregue más al índice, pero aún no lo ha hecho. Puede realizar estos cambios utilizando git-add (1).
Desafortunadamente, no puedo entender esto. Debe haber una práctica de una sola línea para la que podría crear un alias, ¿verdad?
USANDO UNA HERRAMIENTA DIFF VISUAL
La respuesta predeterminada (en la línea de comando)
Las respuestas principales aquí muestran correctamente cómo ver los cambios almacenados / almacenados en caché en el Index
:
$ git diff --cached
o $ git diff --staged
que es un alias.
Lanzar la herramienta Visual Diff en su lugar
La respuesta predeterminada escupirá los cambios de diferencias en el git bash (es decir, en la línea de comandos o en la consola). Para aquellos que prefieren una representación visual de las diferencias de archivos por etapas, hay un script disponible en git que lanza una herramienta de diferencias visuales para cada archivo visto en lugar de mostrarlos en la línea de comandos, llamada difftool
:
$ git difftool --staged
Esto hará lo mismo que en git diff --staged
, excepto que cada vez que se ejecute la herramienta diff (es decir, cada vez que un archivo sea procesado por diff), se lanzará la herramienta de diferencias visuales predeterminada (en mi entorno, esto es kdiff3 ) .
Después de que se inicie la herramienta, el script de git diff se detendrá hasta que se cierre su herramienta visual diff. Por lo tanto, deberá cerrar cada archivo para ver el siguiente.
Siempre se puede usar difftool
en lugar de diff
en los comandos de git
Para todas sus necesidades de diferencias visuales, git difftool
funcionará en lugar de cualquier comando de git diff
, incluidas todas las opciones.
Por ejemplo, para que la herramienta visual diff se inicie sin preguntar si se debe hacer para cada archivo, agregue la opción -y
(¡Creo que generalmente querrá esto!):
$ git difftool -y --staged
En este caso, se recuperará cada archivo en la herramienta visual diff, uno a la vez, y aparecerá el siguiente después de que se cierre la herramienta.
O para ver la diferencia de un archivo en particular que se encuentra en el Index
:
$ git difftool -y --staged <<relative path/filename>>
Para todas las opciones, vea la página del manual:
$ git difftool --help
Configuración de la herramienta Visual Git
Para usar una herramienta visual git que no sea la predeterminada, use la opción -t <tool>
:
$ git difftool -t <tool> <<other args>>
O, consulte la página del manual de difftool para saber cómo configurar git para que use una herramienta de diferencia visual por defecto diferente.
A partir de la versión 1.7 y posterior debería ser:
git diff --staged
Para el uso de la comparación de la zona de almacenamiento frente al repositorio
$git diff --staged
Para uso comparativo entre trabajo y repositorio
$ git diff
pero si un archivo se cambia y se agrega al área de almacenamiento ( $ git add fileName
) e intentamos ver la diferencia con ( $ git diff
). No devolverá ninguna diferencia ya que el archivo está en el área de almacenamiento y no se comparará con el repositorio.
Piensa también en la herramienta gitk
, provista con git y muy útil para ver los cambios
Por defecto, git diff se usa para mostrar los cambios que no se agregan a la lista de archivos actualizados de git. Pero si desea mostrar los cambios agregados o escalonados, debe proporcionar opciones adicionales que le permitan a git saber que está interesado en los archivos agregados o agregados.
$ git diff # Default Use
$ git diff --cached # Can be used to show difference after adding the files
$ git diff --staged # Same as ''git diff --cached'' mostly used with latest version of git
Ejemplo
$ git diff
diff --git a/x/y/z.js b/x/y/z.js index 98fc22b..0359d84 100644
--- a/x/y/z.js
+++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {
- if (a)
+ if (typeof a !== ''undefined'')
res = 1;
else
res = 2;
$ git add x/y/z.js
$ git diff
$
Una vez que agrega los archivos, no puede usar el valor predeterminado de ''git diff''. Debe hacer esto:
$ git diff --cached
diff --git a/x/y/z.js b/x/y/z.js index 98fc22b..0359d84 100644
--- a/x/y/z.js
+++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {
- if (a)
+ if (typeof a !== ''undefined'')
res = 1;
else
res = 2;
Puedes usar este comando.
git diff --cached --name-only
La opción --cached
de git diff
significa obtener archivos almacenados, y la opción --name-only
significa obtener solo los nombres de los archivos.
Si le interesaría una vista visual lado a lado, la herramienta de diffuse visual puede hacerlo. Incluso mostrará tres paneles si algunos pero no todos los cambios están en escena. En el caso de conflictos, incluso habrá cuatro paneles.
Invocalo con
diffuse -m
en su copia de trabajo Git.
Si me preguntas, la mejor diferencia visual que he visto durante una década. Además, no es específico de Git: Interopera con una gran cantidad de otros VCS, incluyendo SVN, Mercurial, Bazaar, ...
Ver también: ¿ Mostrar tanto el árbol en escena como el de trabajo en git diff?
Si sus intenciones son presionar como objetivo una rama de recompra remota y su primer paso en un registro de cambios de confirmación fue incompleto, puede corregir la declaración de confirmación antes de presionar así.
En la zona
... hacer algunos cambios ...
git diff # look at unstaged changes
git commit -am"partial description of changes"
... recordar más cambios no mencionados en cometer ...
git diff origin / master # mira los cambios preconfigurados pero no impulsados
... enmendar la declaración de confirmación por etapas ...
git commit --amend -m"i missed mentioning these changes ...."
git push
Si tiene más de un archivo con cambios por etapas, puede ser más práctico usar git add -i
, luego seleccione 6: diff
, y finalmente elija el archivo (s) que le interesa.
Simplemente debería ser:
git diff --cached
--cached
significa mostrar los cambios en el caché / índice (es decir, cambios por etapas) en comparación con el HEAD
actual. --staged
es un sinónimo de --cached
.
--staged
y --cached
no apuntan a HEAD
, solo diferencia con respecto a HEAD
. Si elige qué hacer usando git add --patch
(o git add -p
), --staged
devolverá lo que está en escena.
Tenga en cuenta que git status -v
también muestra los cambios por etapas. (lo que significa que debe haber configurado - git add
- algunos cambios. No hay cambios por etapas, no hay diferencias con el git status -v
.
Lo hace desde Git 1.2.0, febrero 2006 )
En su forma larga (por defecto), git status
tiene una opción "detallada" no documentada que en realidad muestra la diferencia entre HEAD e índice.
Y está a punto de volverse aún más completo: vea "¿ Mostrar tanto el árbol en escena como el de trabajo en git diff? " (Git 2.3.4+, Q2 2015):
git status -v -v
Un gráfico simple hace esto más claro:
git diff
Muestra los cambios entre el directorio de trabajo y el índice. Esto muestra lo que se ha cambiado, pero no está preparado para un compromiso.
git diff --cached
Muestra los cambios entre el índice y el HEAD (que es el último compromiso en esta rama). Esto muestra lo que se ha agregado al índice y se ha preparado para un compromiso.
git diff HEAD
Muestra todos los cambios entre el directorio de trabajo y HEAD (que incluye cambios en el índice). Esto muestra todos los cambios desde la última confirmación, ya sea que se hayan realizado o no para la confirmación.
Tambien
Hay un poco más de detalle en 365Git.
git gui
y git-cola
son utilidades gráficas que te permiten ver y manipular el índice. Ambos incluyen diferencias visuales simples para archivos en etapas, y git-cola
también puede lanzar una herramienta de diferencias visuales lado a lado más sofisticada.
Vea mi respuesta estrechamente relacionada en ¿Cómo eliminar un archivo del índice en git? , y también este catálogo oficial de Git - Clientes GUI .