¿Cómo muestro los cambios que se han realizado?

Organicé algunos cambios para comprometerme; ¿Cómo puedo ver la diferencia de todos los files que se organizan para la siguiente confirmación? Soy consciente del estado de git , pero me gustaría ver los diffs reales, no solo los nombres de los files que se organizan.

Vi que la página de manual de git-diff (1) dice

git diff [–options] [-] […]

Este formulario es para ver los cambios que hizo en relación con el índice (área de ensayo para el siguiente compromiso). En otras palabras, las diferencias son lo que podrías decir que git agregue aún más al índice, pero aún no lo has hecho. Puedes organizar estos cambios usando git-add (1).

Desafortunadamente, no puedo entender esto. Debe haber algún práctico delineador para el que pueda crear un alias, ¿verdad?

Simplemente debería ser:

 git diff --cached 

--cached medios --cached en caching muestran los cambios en el caching / índice (es decir, cambios por etapas) contra el HEAD actual. --staged es un sinónimo de --cached .

EDITAR

Solo para aclarar la afirmación anterior, --staged y --cached no apunta a HEAD , solo diferencia con respecto a HEAD . Si seleccionas con git add --patch qué comprometer usando git add --patch (o git add -p ), --staged devolverá lo que está organizado.

Un simple gráfico lo aclara:

Diferencias simples de Git

git diff

Muestra los cambios entre el directory de trabajo y el índice. Esto muestra lo que se ha cambiado, pero no está configurado para una confirmación.

git diff –cached

Muestra los cambios entre el índice y HEAD (que es la última confirmación en esta twig). Esto muestra lo que se ha agregado al índice y preparado para una confirmación.

git diff HEAD

Muestra todos los cambios entre el directory de trabajo y HEAD (que incluye cambios en el índice). Esto muestra todos los cambios desde la última confirmación, independientemente de si se han configurado o no para la confirmación.

También :

Hay un poco más de detalle en 365Git.

Si está interesado en una vista visual una al lado de la otra, la herramienta difusa visual diff puede hacerlo. Incluso mostrará tres paneles si se organizan algunos cambios, pero no todos. En el caso de conflictos, incluso habrá cuatro paneles.

Captura de pantalla de difusión con ediciones escalonadas y sin escena

Invocarlo con

 diffuse -m 

en tu copy de trabajo de Git.

Si me preguntas, las mejores diferencias visuales que he visto en una década. Además, no es específico de Git: interopera con una plétora de otros VCS, incluidos SVN, Mercurial, Bazaar, …

Ver también: ¿ Mostrar tree organizado y en funcionamiento en git diff?

Tenga en count que el git status -v también muestra los cambios por etapas. (lo que significa que debe haber realizado cambios en etapas, git add ). Sin cambios por etapas, sin diferencias con el git status -v .
Lo hace desde Git 1.2.0, febrero de 2006 )

En su forma larga (por defecto), el git status tiene una opción "verbosa" no documentada que muestra la diferencia entre HEAD e index.

Y está a punto de llegar a ser aún más completo: consulte " Mostrar tree organizado y en funcionamiento en git diff? " (Git 2.3.4+, Q2 2015):

 git status -v -v 

Puedes usar este command.

 git diff --cached --name-only 

La opción --cached de git diff significa get files escalonados, y la opción --name-only significa get solo los nombres de los files.

A partir de la versión 1.7 y posterior debería ser:

 git diff --staged 

Si tiene más de un file con cambios por etapas, puede ser más práctico usar git add -i , luego seleccionar 6: diff y finalmente seleccionar el file (s) que le interesa.

Si sus intenciones son enviar por correo electrónico a una sucursal de repos remoto y su primer pase en un logging de cambios de compromiso está incompleto, puede corregir la statement de compromiso antes de presionar de esta manera.

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 commit …

git diff origin / master # mira los cambios por etapas pero no por empuje

… enmienda la statement de compromiso escenificada …

 git commit --amend -m"i missed mentioning these changes ...." git push 

Para el uso de la comparación entre el área de ensayo y el repository

 $git diff --staged 

Para el uso de comparación entre Trabajo versus Depósito

 $ git diff 

pero si un file se cambia y se agrega al área de ensayo ( $ git add fileName ) y tratamos de ver la diferencia con ( $ git diff ). No devolverá ninguna diferencia ya que el file está en el área de ensayo y no se comparará con el repository.

UTILIZAR UNA HERRAMIENTA VISUAL DIFF

La respuesta pnetworkingeterminada (en la línea de command)

Las respuestas principales aquí muestran correctamente cómo ver los cambios en caching / por etapas en el Index :

 $ git diff --cached 

o $ git diff --staged que es un alias.

Lanzando la herramienta Visual Diff en su lugar

La respuesta pnetworkingeterminada escupirá los cambios de diff en git bash (es decir, en la command-line o en la console). Para aquellos que prefieren una representación visual de las diferencias de files en etapas, hay un script disponible dentro de git que lanza una herramienta visual diff para cada file visto en lugar de mostrarlos en la command-line, llamado difftool :

 $ git difftool --staged 

Esto hará lo mismo que git diff --staged , excepto que cada vez que se ejecuta la herramienta diff (es decir, cada vez que un file se procesa por diff), se iniciará la herramienta de diferencia visual pnetworkingeterminada (en mi entorno, esto es kdiff3 ) .

Después de que la herramienta se inicie, la secuencia de commands de git diff se detendrá hasta que se cierre la herramienta de diferencia visual. Por lo tanto, deberá cerrar cada file para ver el siguiente.

Siempre se puede usar difftool en lugar de commands diff en git

Para todas sus necesidades de diferencias visuales, git difftool funcionará en lugar de cualquier command de git diff , incluidas todas las opciones.

Por ejemplo, para iniciar la herramienta de diferencia visual sin preguntar si debe hacerlo para cada file, agregue la opción -y (¡creo que generalmente querrá esto!):

 $ git difftool -y --staged 

En este caso, extraerá cada file de la herramienta de diferencia visual, uno a la vez, y mostrará el siguiente después de cerrar la herramienta.

O para ver la diferencia de un file particular que está organizado en el Index :

 $ git difftool -y --staged <<relative path/filename>> 

Para todas las opciones, consulte la página man:

 $ git difftool --help 

Configurar la herramienta Visual Git

Para usar una herramienta visual de git que no sea la pnetworkingeterminada, use la opción -t <tool> :

 $ git difftool -t <tool> <<other args>> 

O bien, consulte la página man de difftool para saber cómo configurar git para usar una herramienta de diferencia visual pnetworkingeterminada diferente.

git gui y git-queue son utilidades gráficas que le permiten ver y manipular el índice. Ambas incluyen diferencias visuales simples para los files progresivos, y git-queue también puede lanzar una herramienta visual diferencial más sofisticada de lado a lado.

Ver mi respuesta estrechamente relacionada en Cómo quitar un file del índice en git? , y también este catálogo oficial de Git – Clientes GUI .

Piensa en la herramienta gitk también, provista de git y muy útil para ver los cambios

Por defecto, git diff se usa para mostrar los cambios que no se agregan a la list de files actualizados de git. Pero si desea mostrar los cambios agregados o escalonados, debe proporcionar opciones adicionales que le permitan a git saber que le interesan los files escalonados 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 haya agregado los files, no puede usar el valor pnetworkingeterminado de 'git diff'. Tiene que 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;