Buscar..


Sintaxis

  • git diff [options] [<commit>] [--] [<path>…​]
  • git diff [options] --cached [<commit>] [--] [<path>…​]
  • git diff [options] <commit> <commit> [--] [<path>…​]
  • git diff [options] <blob> <blob>
  • git diff [options] [--no-index] [--] <path> <path>

Parámetros

Parámetro Detalles
-p, -u, --patch Generar parche
-s, --no-parche Suprimir salida dif. Útil para comandos como git show que muestra el parche de forma predeterminada, o para cancelar el efecto de --patch
--crudo Generar la diferencia en formato crudo.
--diff-algorithm = Elija un algoritmo de diferencias. Las variantes son las siguientes: myers , minimal , patience , histogram
--resumen Genere un resumen condensado de la información del encabezado extendido, como creaciones, cambios de nombre y cambios de modo
- solo-nombre Mostrar solo nombres de archivos modificados
--nombre-estado Mostrar nombres y estados de archivos modificados Los estados más comunes son M (Modificado), A (Agregado) y D (Eliminado)
--comprobar Avisar si los cambios introducen marcadores de conflicto o errores de espacios en blanco. Lo que se considera errores de espacios en blanco se controla mediante la configuración de core.whitespace . De forma predeterminada, los espacios en blanco al final (incluidas las líneas que consisten únicamente en espacios en blanco) y un carácter de espacio seguido inmediatamente por un carácter de tabulación dentro de la sangría inicial de la línea se consideran errores de espacio en blanco. Sale con un estado distinto de cero si se encuentran problemas. No es compatible con --exit-code
--full-index En lugar del primer puñado de caracteres, muestre los nombres completos de los objetos blob anteriores y posteriores a la imagen en la línea "índice" al generar la salida del formato de parche
--binario Además de --full-index , --full-index una diferencia binaria que se puede aplicar con git apply
-un texto Tratar todos los archivos como texto.
--color Establecer el modo de color; es decir, use --color=always si desea canalizar un diferencial a menos y mantener el colorido de Git

Mostrar diferencias en la rama de trabajo.

git diff

Esto mostrará los unstaged cambios en la rama actual de la confirmación antes de ella. Solo mostrará los cambios relacionados con el índice, lo que significa que muestra lo que podría agregar a la próxima confirmación, pero no lo hizo. Para agregar (poner en escena) estos cambios, puede usar git add .

Si un archivo está en escena, pero se modificó después de que se almacenó, git diff mostrará las diferencias entre el archivo actual y la versión por etapas.

Mostrar diferencias para archivos en etapas

git diff --staged

Esto mostrará los cambios entre la confirmación anterior y los archivos almacenados actualmente.

NOTA: También puedes usar los siguientes comandos para lograr lo mismo:

git diff --cached

Que es solo un sinónimo para --staged o

git status -v

Lo que activará la configuración detallada del comando de status .

Mostrar los cambios en etapas y no en etapas

Para mostrar todos los cambios en etapas y sin etapas, use:

git diff HEAD

NOTA: También puedes usar el siguiente comando:

git status -vv

La diferencia es que la salida de este último realmente le dirá qué cambios se organizan para el compromiso y cuáles no.

Mostrar cambios entre dos confirmaciones

git diff 1234abc..6789def    # old   new

Ej .: Mostrar los cambios realizados en las últimas 3 confirmaciones:

git diff @~3..@    # HEAD -3   HEAD

Nota: los dos puntos (..) son opcionales, pero agregan claridad.

Esto mostrará la diferencia textual entre las confirmaciones, independientemente de dónde se encuentren en el árbol.

Usando meld para ver todas las modificaciones en el directorio de trabajo.

git difftool -t meld --dir-diff

mostrará los cambios de directorio de trabajo. Alternativamente,

git difftool -t meld --dir-diff  [COMMIT_A] [COMMIT_B]

Mostrará las diferencias entre 2 confirmaciones específicas.

Mostrar diferencias para un archivo o directorio específico

git diff myfile.txt

Muestra los cambios entre la confirmación previa del archivo especificado ( myfile.txt ) y la versión modificada localmente que aún no se ha preparado.

Esto también funciona para directorios:

git diff documentation

Lo anterior muestra los cambios entre la confirmación previa de todos los archivos en el directorio especificado ( documentation/ ) y las versiones modificadas localmente de estos archivos, que aún no se han almacenado.

Para mostrar la diferencia entre alguna versión de un archivo en un compromiso dado y la versión HEAD local, puede especificar el compromiso con el que desea comparar:

git diff 27fa75e myfile.txt

O si quieres ver la versión entre dos confirmaciones separadas:

git diff 27fa75e ada9b57 myfile.txt

Para mostrar la diferencia entre la versión especificada por el hash ada9b57 y la última confirmación en la rama my_branchname solo para el directorio relativo llamado my_changed_directory/ puede hacer esto:

git diff ada9b57 my_branchname my_changed_directory/

Viendo un word-diff para líneas largas

git diff [HEAD|--staged...] --word-diff

En lugar de mostrar las líneas cambiadas, esto mostrará las diferencias dentro de las líneas. Por ejemplo, en lugar de:

-Hello world
+Hello world!

Cuando toda la línea está marcada como cambiada, word-diff altera la salida a:

Hello [-world-]{+world!+}

Puede omitir los marcadores [- , -] , {+ , +} especificando --word-diff=color o --color-words . Esto solo usará codificación de colores para marcar la diferencia:

Ejemplo de uso de git diff --color-words

Viendo una combinación de tres vías incluyendo el ancestro común

git config --global merge.conflictstyle diff3

Establece el estilo diff3 como predeterminado: en lugar del formato habitual en las secciones en conflicto, mostrando los dos archivos:

<<<<<<< HEAD
left
=======
right
>>>>>>> master

Incluirá una sección adicional que contiene el texto original (que viene del ancestro común):

<<<<<<< HEAD
first
second
||||||| 
first
=======
last
>>>>>>> master

Este formato facilita la comprensión del conflicto de combinación, es decir, en este caso, se ha agregado el second localmente, mientras que el remoto se cambió first al last , resolviéndose a:

last
second

La misma resolución hubiera sido mucho más difícil utilizando el valor predeterminado:

<<<<<<< HEAD
first
second
=======
last
>>>>>>> master

Mostrar diferencias entre la versión actual y la última versión.

git diff HEAD^ HEAD

Esto mostrará los cambios entre la confirmación anterior y la confirmación actual.

Difunde texto codificado en UTF-16 y archivos plist binarios

Puede diferenciar archivos codificados en UTF-16 (los ejemplos de cadenas de localización de iOS y macOS son ejemplos) especificando cómo git debe diferenciar estos archivos.

Agregue lo siguiente a su archivo ~/.gitconfig .

[diff "utf16"]
textconv = "iconv -f utf-16 -t utf-8"

iconv es un programa para convertir diferentes codificaciones .

Luego edite o cree un archivo .gitattributes en la raíz del repositorio donde desea usarlo. O simplemente editar ~/.gitattributes .

*.strings diff=utf16

Esto convertirá todos los archivos que terminan en .strings antes de git diffs.

Puede hacer cosas similares para otros archivos, que se pueden convertir en texto.

Para archivos binarios de plist editas .gitconfig

[diff "plist"]
textconv = plutil -convert xml1 -o -

y .gitattributes

*.plist diff=plist

Comparando ramas

Mostrar los cambios entre la punta de la new y la punta del original :

git diff original new     # equivalent to original..new

Mostrar todos los cambios en new desde que se bifurcó desde el original :

git diff original...new     # equivalent to $(git merge-base original new)..new

Usando solo un parámetro como

git diff original

es equivalente a

git diff original..HEAD

Mostrar cambios entre dos ramas

git diff branch1..branch2

Producir un parche compatible con el parche.

A veces solo necesitas un diff para aplicar el parche. El git --diff regular git --diff no funciona. Intenta esto en su lugar:

git diff --no-prefix > some_file.patch

Entonces en otro lugar puedes revertirlo:

patch -p0 < some_file.patch

diferencia entre dos commit o rama

Para ver la diferencia entre dos ramas

git diff <branch1>..<branch2>

Para ver la diferencia entre dos ramas

git diff <commitId1>..<commitId2>

Para ver dif con rama actual

git diff <branch/commitId>

Ver resumen de cambios.

git diff --stat <branch/commitId>

Para ver los archivos que cambiaron después de un cierto compromiso

git diff --name-only <commitId>

Para ver archivos que son diferentes a una rama

git diff --name-only <branchName>

Para ver los archivos que cambiaron en una carpeta después de un determinado compromiso

git diff --name-only <commitId> <folder_path>


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow