Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.50.0 no changes
- 2.49.0 no changes
- 2.48.1 no changes
-
2.48.0
2025-01-10
- 2.47.1 → 2.47.2 no changes
-
2.47.0
2024-10-06
- 2.46.1 → 2.46.3 no changes
-
2.46.0
2024-07-29
-
2.45.3
2024-11-26
- 2.45.1 → 2.45.2 no changes
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.3 no changes
-
2.44.0
2024-02-23
- 2.43.2 → 2.43.6 no changes
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.42.2 → 2.42.4 no changes
-
2.42.1
2023-11-02
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 no changes
-
2.41.0
2023-06-01
- 2.40.1 → 2.40.4 no changes
-
2.40.0
2023-03-12
- 2.39.1 → 2.39.5 no changes
-
2.39.0
2022-12-12
- 2.38.1 → 2.38.5 no changes
-
2.38.0
2022-10-02
- 2.37.3 → 2.37.7 no changes
-
2.37.2
2022-08-11
- 2.36.1 → 2.37.1 no changes
-
2.36.0
2022-04-18
- 2.34.1 → 2.35.8 no changes
-
2.34.0
2021-11-15
- 2.33.1 → 2.33.8 no changes
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 no changes
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 no changes
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 no changes
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 no changes
-
2.29.0
2020-10-19
- 2.28.1 no changes
-
2.28.0
2020-07-27
- 2.25.2 → 2.27.1 no changes
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 no changes
-
2.24.0
2019-11-04
- 2.22.1 → 2.23.4 no changes
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 no changes
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 no changes
-
2.20.0
2018-12-09
- 2.19.3 → 2.19.6 no changes
-
2.19.2
2018-11-21
- 2.19.1 no changes
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 no changes
-
2.18.0
2018-06-21
- 2.17.1 → 2.17.6 no changes
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
- 2.10.5 no changes
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.7.6 no changes
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 no changes
-
2.0.5
2014-12-17
SINOPSIS
git diff [<opciones>] [<confirmación>] [--] [<ruta>…] git diff [<opciones>] --cached [--merge-base] [<confirmación>] [--] [<ruta>…] git diff [<opciones>] [--merge-base] <confirmación> [< confirmación >…] < confirmación > [--] [<ruta>…] git diff [<opciones>] < confirmación >…< confirmación > [--] [<ruta>…] git diff [<opciones>] <blob> <blob> git diff [<opciones>] --no-index [--] <ruta> <ruta>
DESCRIPCIÓN
Muestra los cambios entre el árbol de trabajo y el índice o un árbol, cambios entre el índice y un árbol, cambios entre dos árboles, cambios resultantes de una fusión, cambios entre dos objetos blob, o cambios entre dos ficheros en disco.
-
git diff [<opciones>] [--] [<especificación-de-ruta>...]
-
Esta forma es para ver los cambios relativos al índice que hiciste (área de presentación para la siguiente confirmación). En otras palabras, la diferencias son lo que podrías decirle a Git que añada al índice mas adelante pero aún no. Puedes presentar esos cambios usando git-add[1].
-
git diff [<opciones>] --no-index [--] <ruta> <ruta>
-
Esta forma es para comparar las dos rutas en el sistema de ficheros dadas. Puedes omitir la opción
--no-index
cuando se ejecuta el comando en un árbol de trabajo controlado por Git y por lo menos una de las rutas apunta afuera del árbol de trabajo, o cuando se ejecuta el comando fuera de un árbol de trabajo controlado por Git. Esta forma implica--exit-code
. -
git diff [<opciones>] --cached [--merge-base] [<confirmación>] [--] [<ruta>...]
-
Esta forma es para ver los cambios que presentaste para la siguiente confirmación relativa a la <confirmación> nombrada. Típicamente querrás una comparación con la última confirmación, así que si no das <confirmación>, se predetermina a
HEAD
. SiHEAD
no existe (ej. ramas sin nacer) y no se da <confirmación>, muestra todos los cambios presentados.--staged
es un sinónimo de--cached
.Si se da
--merge-base
, en lugar de usar <confirmación>, usa la base de fusión de <confirmación> yHEAD
.git diff --cached --merge-base A
es equivalente agit diff --cached $(git merge-base A HEAD)
. -
git diff [<opciones>] [--merge-base] <commit> [--] [<ruta>...]
-
Esta forma es para ver los cambios que tienes en tu árbol de trabajo relativos a la <confirmación> nombrada. Puedes usar
HEAD
para compararla con la última confirmación, o el nombre de una rama para comparar con la punta de una rama distinta.Si se da
--merge-base
, en lugar de usar <confirmación>, usa la base de fusión de <confirmación> yHEAD
.git diff --merge-base A
es equivalente agit diff $(git merge-base A HEAD)
. -
git diff [<opciones>] [--merge-base] <confirmación> <confirmación> [--] [<ruta>...]
-
Es para ver los cambios entre dos <confirmación> arbitrarias.
Si se da
--merge-base
, usa la base de fusión de las dos confirmaciones para el lado "antes".git diff --merge-base A B
es equivalente agit diff $(git merge-base A B) B
. -
git diff [<opciones>] <confirmación> <confirmación>...<confirmación> [--] [<ruta>...]
-
Esta forma es para ver los resultados de una confirmación de fusión. La primer <confirmación> listada debe ser la fusión en sí; las dos o mas confirmaciones restantes deben ser sus padres. Algunas formas convenientes de producir el conjunto deseado de revisiones son usando los sufijos
@
y^!
. SiA
es una confirmación de fusión, entoncesgit diff A A^@
,git diff A^!
ygit show A
darán la misma diferencia combinada. -
git diff [<opciones>] <confirmación>..<confirmación> [--] [<ruta>...]
-
Este es un sinónimo de la forma anterior (sin
...
) para ver los cambios entre dos <confirmación>_es arbitrarias. Si se omite _<confirmación> en algún lado, tendrá el mismo efecto que si se usaraHEAD
. -
git diff [<opciones>] <confirmación>...<confirmación> [--] [<ruta>...]
-
Esta forma es para ver los cambios en la rama que contiene hasta la segunda <confirmación>, comenzando en el ancestro común a ambas <confirmación>_es.
git diff A...B
es equivalente agit diff $(git merge-base A B) B
. Puedes omitir cualquier _<confirmación>, que tendrá el mismo efecto que usarHEAD
.
Sólo en caso que hagas algo exótico, debe notarse que toda <confirmación> en la descripción anterior, exceptuando el caso --merge-base
y las últimas dos formas que usan la notación ..
, puede ser cualquier <árbol>. Un árbol de interés es al que apunta la referencia nombrada AUTO_MERGE
, la cual se escribe por la estrategia de fusión ort
al darse conflictos de fusión (ver git-merge[1]). Comparar el árbol de trabajo con AUTO_MERGE
mostrará los cambios que has hecho hasta el momento para resolver los conflictos textuales (ver los ejemplos abajo).
Para una lista mas completa de las maneras de invocar <confirmación>, ver la sección "ESPECIFICANDO REVISIONES" en gitrevisions[7]. Sin embargo, diff
a para comparar dos endpoints, no rangos, y las notaciones de rangos (<confirmación>..<confirmación>
y <confirmación>...<confirmación>
) no significan un rango como se define en la sección "ESPECIFICANDO RANGOS" en gitrevisions[7].
OPCIONES
-
-p
-
-u
-
--patch
-
Genera parche (ver Generando texto de parche con -p). Este es el predeterminado
-
-s
-
--no-patch
-
Suprime toda la salida del mecanismo de diff. Útil para planchar la salida de comandos como
git show
que muestra predeterminadamente el parche, o para cancelar antes en la línea de comandos en un alias el efecto de opciones como--patch
,--stat
. -
-U<n>
-
--unified=<n>
-
Genera diffs con <n> líneas de contexto en lugar de las 3 usuales. Implica
--patch
. -
--output=<fichero>
-
Salida a un fichero en específico en lugar de la salida estándar.
-
--output-indicator-new=<caracter>
-
--output-indicator-old=<caracter>
-
--output-indicator-context=<caracter>
-
Especifica el caracter usado para indicar líneas nuevas, antiguas o de contexto en el parche generado. Normalmente son
+
,-
y ' ' respectivamente. -
--raw
-
Generar las diferencias en formato bruto.
-
--patch-with-raw
-
Sinónimo de
-p --raw
. -
--indent-heuristic
-
Habilita la heurística que aumenta los límites de fragmentos de diff para hacer los parches mas fáciles de leer. Este es el predeterminado.
-
--no-indent-heuristic
-
Deshabilita la heurística de indentación.
-
--minimal
-
Ocupa tiempo extra para asegurarse que se produce el diff más pequeño posible.
-
--patience
-
Generar diferencias mediante el algoritmo "patience diff".
-
--histogram
-
Generar diferencias mediante el algoritmo "histogram diff".
-
--anchored=<texto>
-
Generar diferencias mediante el algoritmo "anchored diff".
Esta opción puede ser especificada más de una vez.
Si una línea existe tanto en fuente como en destino, existe sólo una vez, y comienza con <texto>, éste algoritmo intenta prevenir que aparezca en la salida como un borrado o adición. Usa internamente el algoritmo "diff paciente".
-
--diff-algorithm=(patience|minimal|histogram|myers)
-
Elige un algoritmo de diff. La variantes son las siguientes:
-
default
-
myers
-
El algoritmo diff básico avaro. Actualmente, éste es el predeterminado.
-
minimal
-
Ocupa tiempo extra para asegurarse que se produce el diff más pequeño posible.
-
patience
-
Usa el algoritmo "diff paciente" al generar parches.
-
histogram
-
Este algoritmo extiende el algoritmo paciente para "soportar elementos comunes de baja ocurrencia".
Por lo tanto, si configuraste la variable
diff.algorithm
a un valor no predeterminado y quieres usar el predeterminado, entonces tienes que usar la opción--diff-algorithm=default
. -
-
--stat[=<anchura>[,<anchura-nombre>[,<recuento>]]]
-
Generate a diffstat. By default, as much space as necessary will be used for the filename part, and the rest for the graph part. Maximum width defaults to terminal width, or 80 columns if not connected to a terminal, and can be overridden by <width>. The width of the filename part can be limited by giving another width <name-width> after a comma or by setting
diff.statNameWidth=<name-width>
. The width of the graph part can be limited by using--stat-graph-width=<graph-width>
or by settingdiff.statGraphWidth=<graph-width>
. Using--stat
or--stat-graph-width
affects all commands generating a stat graph, while settingdiff.statNameWidth
ordiff.statGraphWidth
does not affectgit format-patch
. By giving a third parameter <count>, you can limit the output to the first <count> lines, followed by...
if there are more.Estos parámetros también se puedes asignar individualmente con
--stat-width=<ancho>
,--stat-name-width=<nombre-ancho>
y--stat-count=<conteo>
. -
--compact-summary
-
Da salida en el diffstat a un resumen condensado de información de encabezado extendido, como creaciones o eliminaciones de ficheros ("new" or "gone", opcionalmente
+l
si es un enlace simbólico) y cambios de modo (+x
o-x
para añadir o quitar el bit de ejecución respectivamente). La información se coloca entre la parte del nombre del fichero y la parte del grafo. Implica--stat
. -
--numstat
-
Similar a
--stat
, pero muestra el número de líneas añadidas y borradas en notación decimal y el nombre de ruta sin abreviación, para hacerlo más amigable a la máquina. Para ficheros binarios, saca dos-
en lugar de decir00
. -
--shortstat
-
Da salida sólo a la última línea del formato
--stat
conteniendo el número total de ficheros modificados, así como el número de líneas añadidas y borradas. -
-X [<parámetro>,...]
-
--dirstat[=<parámetro>,...]
-
Da salida a la distribución de la cantidad relativa de cambios por cada sub-directorio. El comportamiento de
--dirstat
puede ser personalizado pasando una lista de parámetros separados por coma. Los predeterminados se controlan con la variable de configuracióndiff.dirstat
(ver git-config[1]). Están disponibles los parámetros siguientes:-
changes
-
Calcula los números de dirstat contando las líneas que han sido eliminadas del origen, o agregadas en el destino. Esto ignora la cantidad de movimientos de código puro dentro del fichero. En otras palabras, el reacomodo de líneas en un fichero no cuenta tanto como otros cambios. Este es el comportamiento predeterminado cuando no se dan parámetros.
-
lines
-
Calcula los números de dirstat haciendo el análisis de diferencias regular basado en líneas, y sumando los conteos de líneas quitadas/agregadas. (Para ficheros binarios, cuenta en cambio pedazos de 64 bytes, ya que los ficheros binarios no tienen el concepto natural de líneas). Este es un funcionamiento de
--dirstat
mas costoso quechanges
, pero el re-acomodo de líneas dentro de un fichero cuenta tanto como otros cambios. La salida resultante es consistente con lo que obtienes de las otras opciones--*stat
. -
files
-
Calcula los números de dirstat contando el número de ficheros modificados. Cada fichero modificado cuenta igualmente en el análisis de dirstat. Este es el funcionamiento
--dirstat
computacionalmente más barato, ya que no tiene que mirar el contenido del fichero en absoluto. -
cumulative
-
Cuenta cambios en un directorio hijo también para el directorio padre. Nota que cuando se usa
cumulative
, la suma de los porcentajes reportados puede exceder 100%. El comportamiento predeterminado (no-acumulativo) se puede especificar con el parámetrononcumulative
. - <límite>
-
Un parámetro entero especifica un porcentaje de corte (predeterminado a 3%). Directorios que contribuyan menos que éste porcentaje de cambios no se muestran en la salida.
Ejemplo: El siguiente contará ficheros modificados, ignorando directorios con menos del 10% de la cantidad total de ficheros modificados, y acumulando conteos en directorios hijo en los directorios padre:
--dirstat=files,10,cumulative
. -
-
--cumulative
-
Sinónimo de
--dirstat=cumulative
. -
--dirstat-by-file[=<parámetro>,...]
-
Sinónimo de
--dirstat=files,<parámetro>,...
. -
--summary
-
Muestra un resumen condensado de información de encabezado extendido como creaciones, renombrados y cambios de modo.
-
--patch-with-stat
-
Sinónimo de
-p --stat
. -
-z
-
Cuando se da
--raw
,--numstat
,--name-only
o--name-status
, no manipula los nombres de ruta y usa NULs como salida de terminadores de campo.Sin esta opción, los nombres de ruta con caracteres "inusuales" son entrecomillados como se explica para la variable de configuración
core.quotePath
(ver git-config[1]). -
--name-only
-
Muestra sólo el nombre de cada fichero modificado en el árbol post-imagen. Los nombres de ficheros suelen codificarse con UTF-8. Para mas información ver la discusión sobre codificación en la página del manual de git-log[1].
-
--name-status
-
Muestra sólo nombre(s) y estatus de cada fichero modificado. Ver la descripción de la opción
--diff-filter
donde se explica el significado de las letras de estatus. Así como--name-only
los nombres de fichero se suelen codificar en UTF-8. -
--submodule[=<formato>]
-
Especifica cómo se muestran las diferencias en submódulos. Cuando se especifica
--submodule=short
se usa el formatoshort
. Este formato sólo muestra nombres de los commits al principio y al fin del rango. Cuando se especifica--submodule
o--submodule=log
se usa el formatolog
. Este formato lista los commits en el rango como lo hace git-submodule[1]summary
. Cuando se especifica--submodule=diff
se usa el formatodiff
. Este formato muestra un diff en-linea de los cambios en el contenido del submódulo entre el rango del commit. Se predetermina adiff.submodule
o al formatoshort
si la opción de configuración no es asignada. -
--color[=<cuando>]
-
Muestra diff coloreado.
--color
(ej. sin=<cuando>
) es lo mismo que--color=always
. <cuando> puede ser uno dealways
,never
oauto
. Puede se modificado por las configuracionescolor.ui
ycolor.diff
. -
--no-color
-
Desactiva diff coloreado. Puede ser usado para sobre-escribir configuraciones. Es lo mismo que
--color=never
. -
--color-moved[=<modo>]
-
Los renglones de código trasladados se señalan con un color distinto. Puede ser modificado por la configuración
diff.colorMoved
. El <modo> se predetermina ano
si no se da la opción y azebra
si se da la opción sin modo. El modo debe ser uno de:-
no
-
Lineas movidas no son resaltadas.
-
default
-
Es un sinónimo para
zebra
. Esto puede cambiar a un modo mas sensible en el futuro. -
plain
-
Cualquier linea añadida en una ubicación y que haya sido removida en otra ubicación será coloreada con
color.diff.newMoved
. Similarmentecolor.diff.oldMoved
será usado para líneas removidas que fueron añadidas en algún otro lado en el diff. Este modo toma cualquier línea movida, pero no es muy útil en un revisión para determinar si un bloque de código fue movido sin permutación. -
blocks
-
Bloques de texto movido de al menos 20 caracteres alfanuméricos se detectan codiciosamente. Los bloques detectados se pintan usando cualquier color
color.diff.(old|new)Moved
. No se pueden distinguir bloques adyacentes. -
zebra
-
Los bloques de texto movido se detectan como en el modo
blocks
. Los bloques se colorean con cualquier colorcolor.diff.(old|new)Moved
ocolor.diff.(old|new)MovedAlternative
. El cambio entre los dos colores indica que fue detectado un bloque nuevo. -
dimmed-zebra
-
Similar a
zebra
, pero se hace un oscurecimiento adicional de partes no-interesantes de código movido. Las líneas limitantes de dos bloques adyacentes se consideran interesantes, el resto es no-interesante.dimmed_zebra
es un sinónimo obsoleto.
-
-
--no-color-moved
-
Apaga la detección de movimiento. Puede ser usada para sobre-escribir configuraciones. Es lo mismo que
--color-moved=no
. -
--color-moved-ws=<modo>,...
-
Este configura como el espacio en blanco es ignorado cuando se hace la detección de movimiento para
--color-moved
. Puede ser asignado por la configuracióndiff.colorMovedWS
. Estos modos pueden se dados como una lista separada por comas:-
no
-
No ignora espacio en blanco cuando se hace detección de movimiento.
-
ignore-space-at-eol
-
Ignorar cambios de espacios en blanco al finalizar renglón.
-
ignore-space-change
-
Ignora cambios en la cantidad de espacios en blanco. Esto ignora espacio en blanco al final de la línea, y considera todas las otras secuencias de uno o mas caracteres de espacio en blanco como equivalentes.
-
ignore-all-space
-
Ignora espacios en blanco al comparar líneas. Esto ignora diferencias incluso si una línea tiene espacio en blanco donde la otra no tiene alguno.
-
allow-indentation-change
-
Inicialmente ignora cualquier espacio en blanco en la detección de movimiento, y luego agrupa los bloques de código movido sólo en un bloque si el cambio en espacios en blanco es el mismo por línea. Esto es incompatible con los otros modos.
-
-
--no-color-moved-ws
-
No ignorar espacio en blanco durante detección de movimiento. Esto puede usarse para anular ajustes de configuración. Es lo mismo que
--color-moved-ws=no
. -
--word-diff[=<modo>]
-
De manera predeterminada, las palabras se delimitan por espacios; consulte
--word-diff-regex
más abajo. El <modo> predeterminado esplain
, y debe ser uno de:-
color
-
Resaltar palabras modificadas usando sólo colores. Implica
--color
. -
plain
-
Mostrar palabras como
[-removed-]
y{
. No intenta escapar delimitadores si aparecen en la entrada, entonces la salida puede ser ambigua.added
} -
porcelain
-
Usa un formato especial basado en líneas intencionado para consumo de scripts. Las acciones añadir/eliminar/sin-modificar se imprimen en el formato usual diff unificado, comenzando con un caracter
+
/-
/` ` al principio de la línea y extendiendo al final de la línea. Nuevas líneas se representan con una tilde~
en una línea misma. -
none
-
Desactiva de nuevo las diferencias entre palabras.
Nota que a pesar del nombre del primer modo, el color -si esta habilitado- se usa para resaltar las partes cambiadas en todos los modos.
-
-
--word-diff-regex=<expresión-regular>
-
Usa <expresión-regular> para decidir qué es una palabra, en lugar de considerar no-espacios en blanco seguidos como una palabra. También implica
--word-diff
a menos que ya haya sido habilitado.Cada coincidencia sin traslape de <expresión-regular> se considera una palabra. Lo que esté entre esas coincidencias se considera espacio en blanco y es ignorado(!) para propósito de encontrar diferencias. Querrás agregar
|[^[:space:]]
a tu expresión regular para asegurarte que coincida todos lo caracteres que no son espacio en blanco. Una coincidencia que contenga salto de línea es silenciosamente truncada(!) en el salto de línea.Por ejemplo,
--word-diff-regex=.
tratará cada carácter como si fuese una palabra y, por tanto, mostrará las diferencias carácter por carácter.La expresión regular también puede asignarse por un controlador de diff u opción de configuración, ver gitattributes[5] o git-config[1]. Dándolo explícitamente anula cualquier controlador de diff u opción de configuración. Los controladores de diff anulan ajustes de configuración.
-
--color-words[=<expresión-regular>]
-
Equivalente a
--word-diff=color
mas (si se especificó una expresión regular)--word-diff-regex=<expresión-regular>
. -
--no-renames
-
Apaga la detección de renombramiento, incluso cuando el fichero de configuración predetermina hacerlo.
-
--[no-]rename-empty
-
Si usar blobs vacíos como fuente de renombramiento.
-
--check
-
Advierte si los cambios introducidos conflictúan marcadores o errores de espacio en blanco. Lo que es considerado error de espacio en blanco es controlado por la configuración
core.whitespace
. Predeterminadamente, espacios en blanco al final (incluyendo líneas que consisten únicamente en espacios en blanco) y un caracter espacio que es inmediatamente seguido por una caracter tabulador dentro del indentado inicial de una línea, son considerados errores de espacio en blanco. Sale con un estatus no-cero si se encuentran problemas. No compatible con--exit-code
. -
--ws-error-highlight=<tipo>
-
Resalta errores de espacio en blanco en las líneas
context
,old ` o `new
del diff. Valores múltiples se separan con coma,none
restablece valores previos,default
restablece la lista anew
yall
es una forma corta deold,new,context
. Cuando no se da esta opción y no se asigna la variable de configuracióndiff.wsErrorHighlight
, sólo se resaltan errores de espacio en blanco en líneasnew
. Los errores de espacio en blanco se colorean concolor.diff.whitespace
. -
--full-index
-
En lugar del primer puñado de caracteres, muestra los nombres completos pre- y post-imágen de objeto blob en la línea del índice cuando se genera la salida del formato de parche.
-
--binary
-
Además de
--full-index
, saca un diff binario que puede ser aplicado congit-apply
. Implica--patch
. -
--abbrev[=<n>]
-
En lugar de mostrar el nombre de objeto completo en 40 bytes hexadecimal en la salida del formato diff-raw y en las líneas de encabezado de diff-tree, muestra el prefijo más corto que es de por lo menos <n> dígitos hexadecimales de largo que refiere únicamente al objeto. En el formato diff-patch,
--full-index
toma mayor precedencia, ej. si se especifica--full-index
, se mostrarán los nombres completos de blob sin importar--abbrev
. Un número no-predeterminado de dígitos puede especificarse con--abbrev=<n>
. -
-B[<n>][/<m>]
-
--break-rewrites[=[<n>][/<m>]]
-
Rompe cambios de reescritura completa en pares de borrado y creado. Esto sirve para dos propósitos:
Afecta la manera en que un cambio suma al total de reescrituras de un fichero, no como una serie de borrados e inserciones mezcladas con unas cuantas líneas que resultan coincidir textualmente con el contexto, sino como un sólo borrado de todo lo anterior seguido por una sola inserción de todo lo nuevo, y el número <m> controla éste aspecto de la opción
-B
(predeterminado a 60%).-B/70%
especifica que menos del 30% del original debe permanecer en el resultado para que Git lo considere una reescritura total (ej. de lo contrario el parche resultante sería una serie de borrados e inserciones mezclada con líneas de contexto).Cuando se usa con
-M
, un fichero totalmente reescrito se considera la fuente de un cambio de nombre (usualmente-M
sólo considera un fichero que desaparece como fuente de un cambio de nombre), y el número <n> controla éste aspecto de la opción-B
(predeterminado a 50%).-B20%
especifica que un cambio con adición y eliminación comparado con el 20% o mas del tamaño de fichero es elegible para ser seleccionado como una posible fuente de cambio de nombre a otro fichero. -
-M[<n>]
-
--find-renames[=<n>]
-
Detectar cambios de nombre. Si se especifica <n>, es un límite sobre el índice de semejanza (ej. la cantidad de adiciones/eliminaciones comparadas con el tamaño del fichero). Por ejemplo,
-M90%
significa que Git debe considerar un par eliminación/adición como un renombramiento si mas del 90% del fichero no ha cambiado. Sin el signo%
, el número se leerá como una fraccion, con un punto decimal antes de él. Ej.,-M5
será 0.5, que por lo tanto es lo mismo que-M50%
. Similarmente,-M05
es lo mismo que-M5%
. Para limitar la detección a renombramientos exactos, use-M100%
. El índice de semejanza predeterminado es 50%. -
-C[<n>]
-
--find-copies[=<n>]
-
Detecta tanto copias como renombramientos. Ver también
--find-copies-harder
. Si se especifica <n>, tiene el mismo significado que-M<n>
. -
--find-copies-harder
-
Por razones de desempeño, predeterminadamente, la opción
-C
busca copias sólo si el fichero original de la copia fue modificado en el mismo conjunto de cambios. Esta bandera hace que el comando inspeccione ficheros sin modificar como candidatos a fuente de copia. Esta es una operación muy costosa para proyectos grandes, así que usarla con precaución. Dar más de una opción-C
tiene el mismo efecto. -
-D
-
--irreversible-delete
-
Omit the preimage for deletes, i.e. print only the header but not the diff between the preimage and
/dev/null
. The resulting patch is not meant to be applied withpatch
orgit apply
; this is solely for people who want to just concentrate on reviewing the text after the change. In addition, the output obviously lacks enough information to apply such a patch in reverse, even manually, hence the name of the option.Cuando se usa junto con
-B
, omite también la preimagen en la parte de borrado de un par borrar/crear. -
-l<número>
-
Las opciones
-M`y `-C
involucran algunos pasos preliminares que pueden detectar subconjuntos de renombramientos/copias económicamente, seguido de una porción exhaustiva de iteraciones que compara todos los destinos remanentes sin pareja con todos los orígenes relevantes. (Para renombramientos, sólo los orígenes remanentes sin pareja son relevantes; para copias, todos los orígenes son relevantes). Para N orígenes y destinos, esta verificación exhaustiva es O(N^2). Esta opción previene la ejecución de la porción exhaustiva de detección de renombramiento/copia si el número de ficheros orígenes/destino involucrado excede el número especificado. Es predeterminado adiff.renameLimit
. Nota que un valor de 0 es tratado como ilimitado. -
--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]
-
Selecciona sólo los ficheros que son Agregados(
A
), Copiados (C
), eliminados (D
), Modificados (M
), Renombrados (R
), tienen su tipo (ej. fichero regular, enlace simbólico, submódulo, …) cambiado (T
), están sin fusionar (U
), son desconocidos (X
), o tienen su pareja rota (B
). Se puede usar cualquier combinación de los caracteres filtro (incluyendo ninguno). Cuando se agrega*
(todo-o-nada) a la combinación, todas las rutas son seleccionadas si hay algún fichero que cumpla otro criterio en la comparación; si no hay fichero que cumpla otro criterio, nada es seleccionado.También, estas letras en mayúsculas pueden ser en minúscula para excluir. Ej.
--diff-filter=ad
excluye rutas añadidas y eliminadas.Nota que no todos los diffs pueden presentar todos los tipos. Por lo tanto, entradas copiadas y renombradas no pueden aparecer si la detección para esos tipos está deshabilitada.
-
-S<cadena>
-
Busca diferencias que cambian el número de ocurrencias de la <cadena> especificada (ej. adición/eliminación) en un fichero. Destinada para el uso de creadores de scripts.
Es útil cuando buscas un bloque exacto de código (como un struct), y quieres conocer el historial de ese bloque desde la primera vez que entró en existencia: use la característica iterativamente para alimentar el bloque de interés de vuelta a la preimagen
-S
, y seguir hasta que obtengas la primera versión del bloque.También se buscan ficheros binarios.
-
-G<expresión-regular>
-
Busca diferencias cuyo texto de parche contenga líneas agregadas/quitadas que coincidan <expresión-regular>.
Para ilustrar la diferencia entre
-S<expresión-regular>
--pickaxe-regex
y-G<expresión-regular>
, considere una confirmación con el diff siguiente en el mismo fichero:+ return frotz(nitfol, two->ptr, 1, 0); ... - hit = frotz(nitfol, mf2.ptr, 1, 0);
Mientras
git log -G"frotz\(nitfol"
mostrará éste commit,git log -S"frotz\(nitfol" --pickaxe-regex
no lo hará (porque el número de ocurrencias de esa cadena no cambió).A menos que se proporcione
--text
, parches de ficheros binarios sin un filtro de conversión de texto serán ignorados.Ver la entrada pickaxe en gitdiffcore[7] para mas información.
-
--find-object=<id-de-objeto>
-
Busca diferencias que cambien el número de ocurrencias del objeto especificado. Similar a
-S
, solo que el argumento es diferente en que no busca una cadena específica, sino un identificador de objeto específico.El objeto puede ser un blob o un commit de submódulo. Implica la opción
-t
engit-log
para también buscar árboles. -
--pickaxe-all
-
Cuando
-S
o-G
encuentra un cambio, muestra todos los cambios en ese conjunto de cambios, no sólo los ficheros que contienen el cambio en <cadena>. -
--pickaxe-regex
-
Trata la <cadena> dada en
-S
como una expresión regular extendida de POSIX para coincidir. -
-O<fichero-de-ordenamiento>
-
Controla el orden en el que aparecen los ficheros en la salida. Esto anula la variable de configuración
diff.orderFile
(ver git-config[1]). Para cancelardiff.orderFile
, use-O/dev/null
.El orden de salida es determinado por el orden de patrones glob en <fichero-de-ordenamiento>. Todos los ficheros con nombres de ruta que coincidan el primer patrón salen primero, todos los ficheros con nombres de ruta que coincidan el segundo patrón (pero no el primero) salen después, y así sucesivamente. Todos los ficheros con nombres de ruta que no coincidan con algún patrón salen al último, como si hubiera implícito un patrón coincide-todo al final del fichero. Si varios nombres de ruta tienen el mismo rango (coinciden en el mismo patrón pero no en patrones anteriores), su orden de salida respecto al otro es el orden normal.
<fichero-de-ordenamiento> es analizado como sigue:
-
Líneas en blanco son ignoradas, que se pueden usar como separadores por legibilidad.
-
Líneas que comiencen con hash ("
#
") son ignoradas, que se pueden usar para comentarios. Agregue una diagonal invertida ("\
") al inicio del patrón si comienza con un hash. -
Cada línea contiene un solo patrón.
Los patrones tienen la misma sintaxis y semántica que los patrones usados para
fnmatch
(3) sin la banderaFNM_PATHNAME
, excepto que un nombre de ruta también coincida con un patrón si se le quita cualquier cantidad de componentes de ruta al final. Por ejemplo, el patrón "foo*bar
" coincide "fooasdbar
" y "foo/bar/baz/asdf
" pero no "foobarx
". -
-
--skip-to=<fichero>
-
--rotate-to=<fichero>
-
Descarta de la salida los ficheros que están antes que el <fichero> nombrado (ej. skipt to), o los mueve al final de la salida (ej. rotate to). Estas opciones se inventaron primordialmente para uso del comando
git difftool
, y pueden no ser útiles de otra forma. -
-R
-
Intercambia dos entradas; esto es, muestra diferencias entre el índice o fichero en disco y el contenido del árbol.
-
--relative[=<ruta>]
-
--no-relative
-
Cuando se ejecuta desde un subdirectorio del proyecto, se puede decir que se excluyan cambios fuera del directorio y mostrar los nombres de ruta relativos a él con ésta opción. Cuando no estas en un subdirectorio (ej. en un repositorio básico), puedes decir a cuál subdirectorio hacer relativa la salida dando una <ruta> como argumento. Se puede usar
--no-relative
para contrarrestar ambas opciones de configuracióndiff.relative
y--relative
previo. -
-a
-
--text
-
Tratar todos los ficheros como si fueran de texto.
-
--ignore-cr-at-eol
-
Ignora retornos de carro al final de la línea al comparar.
-
--ignore-space-at-eol
-
Ignorar cambios de espacios en blanco al finalizar renglón.
-
-b
-
--ignore-space-change
-
Ignora cambios en la cantidad de espacios en blanco. Esto ignora espacio en blanco al final de la línea, y considera todas las otras secuencias de uno o mas caracteres de espacio en blanco como equivalentes.
-
-w
-
--ignore-all-space
-
Ignora espacios en blanco al comparar líneas. Esto ignora diferencias incluso si una línea tiene espacio en blanco donde la otra no tiene alguno.
-
--ignore-blank-lines
-
Ignorar cambios cuyos renglones están todos vacíos.
-
-l<expresión-regular>
-
--ignore-matching-lines=<expresión-regular>
-
Ignora cambios donde todas las líneas coincidan <expresión-regular>. Esta opción puede especificarse mas de una vez.
-
--inter-hunk-context=<número>
-
Muestra el contexto entre pedazos de diferencia, hasta el <número> especificado de líneas, a modo de fusionar pedazos cercanos. Predeterminado a `diff.interHunkContext`o 0 si no se configura la opción.
-
-W
-
--function-context
-
Mostrar la función completa como líneas de contexto para cada cambio. Los nombres de función se determinan de la misma manera que
git diff
maneja encabezados de pedazos de parche (ver "Definiendo un encabezado de pedazo personalizado" en gitattributes[5]). -
--exit-code
-
Hace al programa salir con códigos similares a
diff
(1). Esto es, sale con 1 si hubo diferencias y 0 significa sin diferencias. -
--quiet
-
Deshabilita toda salida del programa. Implica
--exit-code
. Deshabilita la ejecución de diferencias externas auxiliares cuyo código de salida no es confiable, ej. su respectiva opción de configuracióndiff.trustExitCode
odiff.
<controlador>.trustExitCode
o la variable de ambienteGIT_EXTERNAL_DIFF_TRUST_EXIT_CODE
es falsa. -
--ext-diff
-
Permite la ejecución de un diff auxiliar externo. Si configuras un controlador de diff externo con gitattributes[5], necesitas usar esta opción con git-log[1] y compañía.
-
--no-ext-diff
-
Rechaza controladores de diff externos.
-
--textconv
-
--no-textconv
-
Permite (o rechaza) que se ejecuten filtros de conversión de texto externos cuando se comparan ficheros binarios. Ver gitattributes[5] para detalles. Dado que filtros conversores de texto son típicamente unidireccionales, la diferencia resultante es adecuada para consumo humano, pero no puede ser aplicada. Por esta razón, filtros textconv se habilitan predeterminadamente sólo para git-diff[1] and git-log[1], pero no para git-format-patch[1] o comandos de plomería de diff.
-
--ignore-submodules[=(none|untracked|dirty|all)]
-
Ignora cambios en submódulos en la generación de diferencias. El predeterminado es
all
. Usandonone
considerará el submódulo modificado ya sea cuando contenga ficheros sin rastreo o modificados, o suHEAD
difiera de la confirmación registrada en el superproyecto y pueda se usada para sobremontar cualquiera de las configuraciones de la opciónignore
en git-config[1] o gitmodules[5]. Cuando se usauntracked
los submódulos no son considerados sucios cuando sólo contienen contenido sin rastreo (pero aún son escaneados para contenido modificado). Usandodirty
, ignora todos los cambios al árbol de trabajo de submódulos, sólo se muestran cambios a las confirmaciones almacenadas en el superproyecto (este fue el comportamiento hasta 1.7.0). Usandoall
oculta todos los cambios a submódulos. -
--src-prefix=<prefijo>
-
Mostrar el <prefijo> de origen indicado en lugar de "a/".
-
--dst-prefix=<prefijo>
-
Mostrar el <prefijo> de destino indicado en lugar de "b/".
-
--no-prefix
-
No mostrar ningún prefijo de origen o de destino.
-
--default-prefix
-
Usa los prefijos predeterminados de origen y destino ("a/" y "b/"). Esto anula variables de configuración como
diff.noprefix
,diff.srcPrefix
,diff.dstPrefix
ydiff.mnemonicPrefix
(ver git-config[1]). -
--line-prefix=<prefijo>
-
Anteponer un <prefijo> adicional a cada línea de salida.
-
--ita-invisible-in-index
-
Predeterminadamente las entradas agregadas por
git add -N
aparecen como un fichero vacío existente engit diff
y como un fichero nuevo engit diff --cached
. Esta opción hace que la entrada aparezca como fichero nuevo engit diff
y como inexistente engit diff --cached
. Esta opción puede revertirse con--ita-visible-in-index
. Ambas opciones son experimentales y pueden ser removidas en el futuro.
Para una explicación mas detallada sobre estas opciones comunes ver también gitdiffcore[7].
-
-1
-
--base
-
-2
-
--ours
-
-3
-
--theirs
-
Compara el árbol de trabajo con
-
la versión "base" (etapa #1) cuando se usa
-1
o--base
, -
"nuestra rama" (etapa #2) cuando se usa
-2
o--ours
, or -
"su rama" (etapa #3) cuando se usa
-3
o--theirs
.
The index contains these stages only for unmerged entries i.e. while resolving conflicts. See git-read-tree[1] section "3-Way Merge" for detailed information.
-
-
-0
-
Omit diff output for unmerged entries and just show "Unmerged". Can be used only when comparing the working tree with the index.
-
<ruta>...
-
The <path> parameters, when given, are used to limit the diff to the named paths (you can give directory names and get diff for all files under them).
Formato de salida bruta
El formato de la salida bruta de git-diff-index
, git-diff-tree
, git-diff-files
y git diff --raw
son muy similares.
Todos estos comandos comparan dos conjuntos de cosas; lo que se compara difiere:
-
git-diff-index <arbol-ismo>
-
compara el <arbol-ismo> y los ficheros en el sistema de ficheros.
-
git-diff-index --cached <arbol-ismo>
-
compara el <arbol-ismo> y el índice.
-
git-diff-tree [-r] <arbol-ismo-1> <arbol-ismo-2> [<patron>...]
-
compara los árboles nombrados en los dos argumentos.
-
git-diff-files [<patrón>...]
-
compara el índice y los ficheros en el sistema de ficheros.
El comando git-diff-tree
comienza su salida imprimiendo el hash de los que se compara. Después de eso, todos los comandos imprimen una línea de salida por fichero modificado.
Un línea de salida se formatea así:
in-place edit :100644 100644 bcd1234 0123456 M fichero0 copy-edit :100644 100644 abcd123 1234567 C68 fichero1 fichero2 rename-edit :100644 100644 abcd123 1234567 R86 fichero1 fichero3 create :000000 100644 0000000 1234567 A fichero4 delete :100644 000000 1234567 0000000 D fichero5 unmerged :000000 000000 0000000 0000000 U fichero6
Esto es, de izquierda a derecha:
-
dos puntos.
-
modo para "src"; 000000 si es creación o sin fusionar.
-
un espacio.
-
modo para "dst"; 000000 si se borra o sin fusionar.
-
un espacio.
-
sha1 para "src"; 0{40} si es creación o sin fusionar.
-
un espacio.
-
sha1 para "dst"; 0{40} si es borrado o sin fusionar o "árbol de trabajo está desincronizado con el índice".
-
un espacio.
-
estatus, seguido de número opcional "puntaje".
-
un tabulador o un NUL cuando se usa la opción
-z
. -
ruta a "src"
-
un tabulador o un NUL cuando se usa la opción
-z
; sólo existe para C o R. -
ruta a "dst"; sólo existe para C o R.
-
un LF o un NUL cuando se usa la opción
-z
, para terminar el registro.
Las letras de estatus posibles son:
-
A
: adición de un fichero -
C
: copia de un fichero en uno nuevo -
D
: borrado de un fichero -
M
: modificación del contenido o modo de un fichero -
R
: renombrado de un fichero -
T
: cambio en el tipo del fichero (fichero regular, liga simbólica o sub-módulo) -
U
: fichero sin fusionar (tú debes completar la fusión antes de que se pueda confirmar) -
X
: tipo de cambio "desconocido" (muy probablemente un bug, por favor repórtalo)
Las letras de estatus C
y R
siempre son seguidas de un puntaje (denotando el porcentaje de similaridad entre la fuente y el objetivo del movimiento o copia). La letra de estatus M
puede ser seguida de un puntaje (denotando el porcentaje de disimilaridad) en re-escrituras de ficheros.
El sha1 para "dst" se muestra como puros 0’s si un fichero en el sistema de ficheros esta desincronizado con el índice.
Ejemplo:
:100644 100644 5be4a4a 0000000 M fichero.c
Sin la opción -z
, los nombres de rutas con caracteres "inusuales" son entrecomillados como se explica para la variable de configuración core.quotePath
(ver git-config[1]). Usando -z
el nombre del fichero se manda a la salida literalmente y la línea se termina con un byte NUL.
Formatos de diff para fusiones
git-diff-tree
, git-diff-files
y git-diff --raw
pueden tomar las opciones -c
o --cc
para generar salidas de diff también para confirmaciones de fusión. La salida difiere del formato descrito anteriormente de la manera siguiente:
-
hay un dos puntos por cada antecesor
-
hay mas modos "src" y sha1 de "src"
-
estatus es la concatenación de caracteres de estatus de cada antecesor
-
sin numero de "puntaje" opcional
-
nombre(s) de ruta(s) del fichero separadas por tabulador
Para -c
y --cc
, sólo la ruta destino o final es mostrada incluso si el fichero fue renombrado en cualquier lado del historial. Con --combined-all-paths
, se muestra el nombre de la ruta en cada antecesor seguido del nombre de la ruta en el commit de fusión.
Ejemplos para -c
and --cc
sin --combined-all-paths
:
::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c ::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM bar.sh ::100644 100644 100644 e07d6c5 9042e82 ee91881 RR phooey.c
Ejemplos cuando se agrega --combined-all-paths
a -c
o --cc
:
::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c desc.c desc.c ::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM foo.sh bar.sh bar.sh ::100644 100644 100644 e07d6c5 9042e82 ee91881 RR fooey.c fuey.c phooey.c
Nótese que combined diffs lista sólo ficheros que fueron modificados de todos sus padres.
Generando texto de parche con -p
Ejecutando git-diff[1], git-log[1], git-show[1], git-diff-index[1], git-diff-tree[1], o git-diff-files[1] la opción -p
produce el texto del parche. Puedes personalizar la creación del texto del parche con las variables de ambiente GIT_EXTERNAL_DIFF
y GIT_DIFF_OPTS
(ver git[1]), y el atributo diff
(ver gitattributes[5]).
Lo que produce la opción -p
es ligeramente diferente del formato tradicional de diff:
-
Es precedido por un encabezado "git diff" que se ve así:
diff --git a/fichero1 b/fichero2
Los nombres de fichero
a/
yb/
son iguales a menos que involucre renombrado/copia. Especialmente, incluso para creación o eliminado,/dev/null`_no_ se usa en lugar de los nombres de fichero `a/
ob/
.Cuando se involucra un renombre/copia,
fichero1
yfichero2
muestra el nombre del fichero fuente del renombre/copia y el nombre del fichero que produce el renombre/copia, respectivamente. -
Es seguido por una o mas líneas de encabezado extendido:
old mode <modo> new mode <modo> deleted file mode <modo> new file mode <modo> copy from <ruta> copy to <ruta> rename from <ruta> rename to <ruta> similarity index <número> dissimilarity index <número> index <hash>..<hash> <modo>
Modos de fichero <modo> se imprimen como números octales de 6 dígitos incluyendo el tipo de fichero y los bits de permiso de fichero.
Nombres de ruta en encabezados extendidos no incluyen los prefijos
a/
yb/
.El índice de similaridad es el porcentaje de líneas sin cambios, y el índice de disimilaridad es el porcentaje de líneas modificadas. Es un entero redondeado hacia abajo, seguido por un signo de porcentaje. El índice de similaridad valor 100% es por lo tanto reservado para dos ficheros iguales, mientras que un 100% de disimilaridad significa que ninguna línea del fichero antiguo llegó al nuevo.
La línea de índice incluye los nombres de objeto blob antes y después del cambio. El <modo> se incluye si el modo del fichero no cambia; de lo contrario, líneas separadas indican los modos anterior y nuevo.
-
Nombres de ruta con caracteres "inusuales" se entrecomillan como se explica para la variable de configuración
core.quotePath
(ver git-config[1]). -
Todos los ficheros
fichero1
en la salida refieren a ficheros antes del commit, y todos los ficheros `fichero2`refieren a ficheros después del commit. Es incorrecto aplicar cada cambio a cada fichero secuencialmente. Por ejemplo, este parche intercambiará a y b:diff --git a/a b/b rename from a rename to b diff --git a/b b/a rename from b rename to a
-
Encabezados de fragmento mencionan el nombre de la función a la cual se aplica el fragmento. Ver "Definiendo un encabezado de fragmento personalizado" en gitattributes[5] para detalles de cómo ajustar éste a lenguajes específicos.
Formato de diff combinado
Cualquier comando que genere un diff puede tomar las opciones -c
o --cc
para producir una diff combinada cuando se muestra la fusión. Este es el formato predeterminado cuando se muestran fusiones con git-diff[1] o git-show[1]. Note que también puede ser adecuado dar la opción --diff-merges
a cualquiera de esos comandos para forzar la generación de diffs en un formato específico.
Un formato "diff combinado" se ve así:
diff --combined describe.c index fabadb8,cc95eb0..4866510 --- a/describe.c +++ b/describe.c @@@ -98,20 -98,12 +98,20 @@@ return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1; } - static void describe(char *arg) -static void describe(struct commit *cmit, int last_one) ++static void describe(char *arg, int last_one) { + unsigned char sha1[20]; + struct commit *cmit; struct commit_list *list; static int initialized = 0; struct commit_name *n; + if (get_sha1(arg, sha1) < 0) + usage(describe_usage); + cmit = lookup_commit_reference(sha1); + if (!cmit) + usage(describe_usage); + if (!initialized) { initialized = 1; for_each_ref(get_name);
-
Es precedido por un encabezado "git diff", que se ve así (cuando se usa la opción
-c
):diff --combined fichero
o así (cuando se usa la opción
--cc
):diff --cc fichero
-
Es seguido por uno o mas líneas de encabezado extendido (este ejemplo muestra una fusión con dos padres):
index <hash>,<hash>..<hash> mode <modo>,<modo>
..
<modo> new file mode <modo> deleted file mode <modo>,<modo>La línea
mode <modo>,<modo>..<modo>
sólo aparece si por lo menos uno de los <modo> es diferente del resto. Los encabezados extendidos con información sobre movimientos de contenido detectados (detección de renombrados y copia) están diseñados para trabajar con el diff de dos <arbol-ismos> y no se usan en el formato diff combinado. -
Es seguido por un encabezado de dos líneas del-fichero/al-fichero:
--- a/fichero +++ b/fichero
Similar al encabezado de dos líneas del formato diff tradicional unificado, se usa
/dev/null
para indicar ficheros creados o borrados.Sin embargo, si se da la opción --combined-all-paths, en lugar de dos líneas con de-fichero/a-fichero obtendrá un encabezado de-fichero/a-fichero de N+1 líneas, donde N es el número de padres en la confirmación de fusión:
--- a/fichero --- a/fichero --- a/fichero +++ b/fichero
Este formato extendido puede ser útil si la detección de renombre o copia esta activa, para permitirte ver el nombre original del fichero en padres diferentes.
-
El formato de encabezado de fragmento se modifica para prevenir a la gente de mandarlo accidentalmente a
patch -p1
. El formato diff combinado fue creado para revisión de cambios de commit de fusión, sin la intención de ser aplicado. El cambio es similar al cambio en el encabezado de índice extendido:@@@ <rango-desde-fichero> <rango-desde-fichero> <rango-hacia-fichero> @@@
Hay (número de padres +1) caracteres
@
en el encabezado de fragmento para formato diff combinado.
A diferencia del formato diff unificado tradicional, el cual muestra dos ficheros A Y B con una sola columna con los prefijos -
(menos — aparece en A pero eliminado en B), +
(mas — faltante en A pero agregado a B), o " "
(espacio — sin cambio), este formato compara dos o mas ficheros fichero1, fichero2,… con un fichero X, y muestra como X difiere de cada ficheroN. Una columna para cada uno de los ficheroN es antepuesta a la línea de salida para notar como la línea de X es diferente de ella.
Un caracter -
en la columna N significa que la línea aparece en ficheroN pero no aparece en el resultado. Un caracter +
en la columna N significa que la línea aparece en el resultado, y ficheroN no tiene esa línea (en otras palabras, la línea fue añadida, desde el punto de vista del antecesor).
En el ejemplo de salida de arriba, la firma de la función cambió en ambos ficheros (por eso los dos -
eliminaciones de ambos ficheros fichero1 y fichero2, además ++
que significa que una línea agregada no aparece en ningún fichero de fichero1 o fichero2). Además, otras ocho líneas iguales del fichero1 que no aparecen en fichero2 (por eso prefijadas con +
).
Cuando se muestra por git diff-tree-c
, compara los padres de un commit de fusión con el resultado de la fusión (ej. fichero1..ficheroN son los padres). Cuando se muestra por git diff-files-c
, compara los dos padres de fusión no-resueltos con el fichero del árbol de trabajo (ej. fichero1 en etapa 2 conocida como "nuestra versión", fichero2 en etapa 3 conocida como "la versión de ellos").
otros formatos diff
La opción --summary
describe ficheros recientemente agregados, eliminados, renombrados y copiados. La opción --stat
agrega el grafo de diffstat
(1) a la salida. Estas opciones pueden ser combinadas con otras, como -p
, y su intención es para consumo humano.
Cuando se muestra un cambio que involucra un renombrado o copia, la salida con --stat
formatea compactamente los nombres de las rutas combinando prefijos y sufijos comunes de los nombres de ruta. Por ejemplo, un cambio que mueve arch/i386/Makefile
a arch/x86/Makefile
cuando se modifican 4 líneas se verá como:
arch/{i386 => x86}/Makefile | 4 +--
La opción --numstat
da la información de diffstat(1), pero esta diseñada para un fácil consumo por máquina. Una entrada en la salida de --numstat
se ve así:
1 2 LEEME 3 1 arch/{i386 => x86}/Makefile
Esto es, de izquierda a derecha:
-
el número de líneas añadidas;
-
un tabulador;
-
el número de líneas eliminadas;
-
un tabulador;
-
nombre de ruta (posiblemente con información de renombre/copia);
-
un salto de línea.
Cuando la opción de salida -z
está en efecto, la salida se formatea así:
1 2 LEEME NUL 3 1 NUL arch/i386/Makefile NUL arch/x86/Makefile NUL
Esto es:
-
el número de líneas añadidas;
-
un tabulador;
-
el número de líneas eliminadas;
-
un tabulador;
-
un NUL (sólo existe si renombrado/copiado);
-
nombre de ruta en pre-imagen;
-
un NUL (sólo existe si renombrado/copiado);
-
nombre de ruta en post-imagen (sólo existe si renombrado/copiado);
-
un NUL.
El NUL
extra antes de la ruta de pre-imagen en caso de renombrado es para permitir a los scripts que leen la salida decir si el registro actual leído es un registro de una sola ruta o un registro de renombre/copia sin lectura posterior. Después de leer las líneas agregadas y eliminadas, leer hasta NUL
dará el nombre de ruta , pero si es NUL
, el registro mostrará dos rutas.
EJEMPLOS
- Varias formas de revisar tu árbol de trabajo
-
$ git diff (1) $ git diff --cached (2) $ git diff HEAD (3) $ git diff AUTO_MERGE (4)
-
Cambios en el árbol de trabajo aún no presentados para la confirmación siguiente.
-
Cambios entre el índice y tu última confirmación; lo que estarás confirmando si ejecutas
git commit
sin la opción-a
. -
Changes in the working tree since your last commit; what you would be committing if you run
git commit -a
-
Changes in the working tree you’ve made to resolve textual conflicts so far.
-
- Comparando con confirmaciones arbitrarias
-
$ git diff test (1) $ git diff HEAD -- ./test (2) $ git diff HEAD^ HEAD (3)
-
En lugar de usar la punta de la rama actual, compara con la punta de la rama "test".
-
Instead of comparing with the tip of "test" branch, compare with the tip of the current branch, but limit the comparison to the file "test".
-
Compara la versión antes de la última confirmación y la última confirmación.
-
- Comparando ramas
-
$ git diff topic master (1) $ git diff topic..master (2) $ git diff topic...master (3)
-
Cambios entre las puntas de las ramas topic y master.
-
Igual que el anterior.
-
Changes that occurred on the master branch since when the topic branch was started off it.
-
- Limitando la salida de diff
-
$ git diff --diff-filter=MRC (1) $ git diff --name-status (2) $ git diff arch/i386 include/asm-i386 (3)
-
Show only modification, rename, and copy, but not addition or deletion.
-
Show only names and the nature of change, but not actual diff output.
-
Limit diff output to named subtrees.
-
- Munging the diff output
-
$ git diff --find-copies-harder -B -C (1) $ git diff -R (2)
-
Spend extra cycles to find renames, copies and complete rewrites (very expensive).
-
Output diff in reverse.
-
CONFIGURACIÓN
Todo debajo de ésta línea en ésta sección es incluido selectivamente de la documentación de git-config[1]. El contenido es el mismo al que se encuentra ahí:
Warning
|
Missing See original version for this content. |
GIT
Parte de la suite de git[1]