Organicé algunos cambios para ser comprometidos; ¿Cómo puedo ver la diferencia de todos los archivos que se organizan 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 organizados.
Vi que la página del comando man 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 para agregar aún más al índice, pero aún no lo ha hecho. Puede organizar estos cambios utilizando git-add (1).
Desafortunadamente, no puedo entender esto. Debe haber una sola línea útil para la que podría crear un alias, ¿verdad?
git status -v
también funciona Vea mi respuesta a continuaciónless
, como en:git status -v | less
- fragmentos manejables :)Respuestas:
Solo debería ser:
--cached
significa mostrar los cambios en el caché / índice (es decir, cambios por etapas) contra la corrienteHEAD
.--staged
es sinónimo de--cached
.--staged
y--cached
no señalaHEAD
, solo la diferencia con respecto aHEAD
. Si elige qué comprometer usandogit add --patch
(ogit add -p
),--staged
devolverá lo que está en escena.fuente
git diff --name-only --cached
por publicación en stackoverflow.com/a/4525025/255187git difftool --staged
lugar degit diff --staged
iniciar la herramienta de diferencia visual predeterminada en cada archivo.difftool
puede ser sustituido pordiff
cualquier otro argumento también.git difftool --staged -d
para diferenciar los dos directorios en una herramienta visual en lugar de un archivo a la vez.git diff --cached -- <stagedfile>
Un gráfico simple aclara esto:
git diff
Muestra los cambios entre el directorio de trabajo y el índice. Esto muestra lo que ha cambiado, pero no está preparado para una confirmación.
git diff - caché
Muestra los cambios entre el índice y el HEAD (que es la última confirmación en esta rama). Esto muestra lo que se ha agregado al índice y preparado para una confirmación.
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 preparado o no para la confirmación.
También :
Hay un poco más de detalle en 365Git.
fuente
foo.c
y no realizagit add foo.c
, entonces nofoo.c
está en el índice ; no está preparado para comprometerse. Sigit diff foo.c
ingenuamente se compara con el trabajofoo.c
con el índice, entonces tendría que mostrar una diferencia gigante entre un archivo vacío / inexistente y todo el contenido defoo.c
. De hecho, cuando un archivo no existe en el índice,git diff
recurre, para ese archivo, al usar laHEAD
copia.HEAD
que se aplican los cambios por etapas. Recuerde que Git funciona guardando cambios, no guardando archivos completos. Cuando presenta un archivo, solo almacena los cambios realizados. Si el índice está en blanco como implica, no sabría cómo guardar los cambios en el índice y tendría que guardar todo el archivo como "recién agregado", lo cual es incorrecto.HEAD
tendrán la versión sin cambios delfoo.c
archivo (no son copias físicas, sino solo copias lógicas para usted y para mí. Para Git son la misma secuencia de datos a la que se refiere cada confirmación que haya involucrado ese archivo) ) Así que cuando lo hacegit diff
en el totalmente unstagedfoo.c
en realidad no es caer de nuevo aHEAD
que en realidad es hacer el diff con el índice (que pasa a contener exactamente la misma versión del archivo comoHEAD
lo hace). Entonces el gráfico es correcto.git status -v
es equivalente agit diff --cached
(más,git status
por supuesto)Si le interesa una vista visual de lado a lado, la herramienta difusa visual difusa puede hacerlo. Incluso mostrará tres paneles si se realizan algunos pero no todos los cambios. En el caso de conflictos, incluso habrá cuatro paneles.
Invocarlo con
en tu copia de trabajo de Git.
Si me preguntas, la mejor diferencia visual que he visto en una década. Además, no es específico de Git: interopera con una gran cantidad de otros VCS, incluidos SVN, Mercurial, Bazaar, ...
Ver también: ¿ Mostrar el árbol en etapas y en funcionamiento en git diff?
fuente
brew install diffuse
funciona en OS X. No muestra 3 paneles si hay cambios no organizados y por etapas: ¿quiso decir que los cambios aún no están en el índice?Tenga en cuenta que
git status -v
también muestra los cambios por etapas! (lo que significa que necesita tener puesta en escena -git add
algunos cambios. Sin cambios por etapas, sin diferenciasgit status -v
.Lo hace desde Git 1.2.0, febrero de 2006 )
En su forma larga (predeterminada),
git status
tiene una opción "detallada" no documentada que realmente muestra la diferencia entre HEAD e index.Y está a punto de ser aún más completo: consulte "¿ Mostrar tanto el árbol en etapas como el árbol de trabajo en git diff? " (Git 2.3.4+, Q2 2015):
fuente
git diff HEAD
git status -vv
también incluye lo quegit diff HEAD
hace.git version 1.8.3.1
. Sé que es viejo, pero si es posible, tenga en cuenta cuándo se introdujo esta bandera.git status -v
es más antiguo ( github.com/git/git/commit/… , git 1.2.0, febrero de 2006). Tenga en cuenta que muestra la diferencia entre el índice yHEAD
: si ha agregado algo al índice (nogit add
),git status -v
no mostrará ninguna diferencia.git status -v -v
es más reciente (Git 2.3.4, marzo de 2015)git diff -v
.Puedes usar este comando.
La
--cached
opción degit diff
significa obtener archivos organizados, y la--name-only
opción significa obtener solo nombres de los archivos.fuente
--name-only
opción que también podría usar el regulargit status
Desde la versión 1.7 y posteriores debería ser:
fuente
UTILIZANDO UNA HERRAMIENTA VISUAL DIFF
La respuesta predeterminada (en la línea de comando)
Las respuestas principales aquí muestran correctamente cómo ver los cambios almacenados en caché / por etapas en
Index
:o
$ git diff --staged
que es un alias.Lanzamiento de 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 comando o en la consola). Para aquellos que prefieren una representación visual de las diferencias de archivos por etapas, hay un script disponible dentro de git que lanza una herramienta de diferencia visual para cada archivo visto en lugar de mostrarlos en la línea de comandos, llamada
difftool
:Esto hará lo mismo que
git diff --staged
, excepto que cada vez que se ejecuta la herramienta diff (es decir, cada vez que diff procesa un archivo), se iniciará la herramienta visual diff predeterminada (en mi entorno, esto es kdiff3 ).Después de que se inicie la herramienta, el script git diff se detendrá hasta que se cierre la herramienta visual diff. Por lo tanto, deberá cerrar cada archivo para ver el siguiente.
Siempre se puede usar
difftool
en lugar de losdiff
comandos in gitPara todas sus necesidades de diferencias visuales,
git difftool
funcionará en lugar de cualquiergit diff
comando, incluidas todas las opciones.Por ejemplo, para que se inicie la herramienta visual diff sin preguntar si se debe hacer para cada archivo, agregue la
-y
opción (¡creo que generalmente querrá esto!):En este caso, extraerá cada archivo de la herramienta visual diff, uno a la vez, y mostrará el siguiente una vez que la herramienta se cierre.
O para ver la diferencia de un archivo en particular que se organiza en
Index
:Para ver todas las opciones, consulte la página del manual:
Configurar la herramienta Visual Git
Para usar una herramienta visual git que no sea la predeterminada, use la
-t <tool>
opción:O consulte la página de manual de difftool para saber cómo configurar git para usar una herramienta de diferencia visual predeterminada diferente.
Ejemplo
.gitconfig
Entradas de para vscode como herramienta diff / mergeParte de la configuración de un difftool implica cambiar el
.gitconfig
archivo, ya sea a través de comandos git que lo cambian detrás de escena, o editarlo directamente.Puede encontrar su
.gitconfig
en su directorio de inicio, como~
en Unix o normalmentec:\users\<username>
en Windows).O puede abrir el usuario
.gitconfig
en su editor Git predeterminado congit config -e --global
.Aquí hay entradas de ejemplo en mi usuario global
.gitconfig
para VS Code como herramienta de diferencias y herramienta de fusión:fuente
Para la comparación del área de ensayo frente al repositorio (último compromiso), utilice
El comando compara los
$ git add fileName
cambios efectuados ( ) con su última confirmación. Si quieres ver lo que has puesto en escena en tu próximo commit, puedes usar git diff --staged. Este comando compara sus cambios por etapas con su última confirmación.Para el uso de comparación de comparación de trabajo versus estadificación
El comando compara lo que está en su directorio de trabajo con lo que está en su área de preparación. Es importante tener en cuenta que git diff por sí solo no muestra todos los cambios realizados desde su última confirmación, solo los cambios que aún no se han organizado. Si ha realizado todos sus cambios (
$ git add fileName
), git diff no le dará salida.Además, si organiza un archivo (
$ git add fileName
) y luego lo edita, puede usar git diff para ver los cambios en el archivo que están en escena y los cambios que no están en escena.fuente
$ git diff
" . Estoy bastante seguro de que segit diff
compara entre Trabajar vs Estadificación. Ver stackoverflow.com/a/1587952Si sus intenciones son apuntar hacia una rama de repositorio remota y su primer pase en un registro de cambios de confirmación fue incompleto, puede corregir la declaración de confirmación antes de presionar de esta manera.
En la zona
... hacer algunos cambios ...
... recordar más cambios no mencionados en commit ...
git diff origin / master # mira cambios en etapas pero no empujados
... enmendar la declaración de confirmación por etapas ...
fuente
Si tiene más de un archivo con cambios por etapas, puede ser más práctico usarlo
git add -i
, luego seleccione6: diff
y finalmente elija los archivos que le interesan.fuente
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 que se agrega o stagged entonces usted necesita para proporcionar opciones adicionales que le permitirá saber git que usted está interesado en los archivos stagged o añadido diff .
Ejemplo
Una vez que haya agregado los archivos, no puede usar el valor predeterminado de 'git diff'. Debe hacer lo siguiente:
fuente
git gui
ygit-cola
son utilidades gráficas que le permiten ver y manipular el índice. Ambos incluyen diferencias visuales simples para archivos en etapas, ygit-cola
también pueden lanzar una herramienta de diferencia visual 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 clientes Git - GUI .
fuente
Piense también en la
gitk
herramienta, provista de git y muy útil para ver los cambios.fuente