comparar archivos git
¿Cómo comparar archivos de dos ramas diferentes? (8)
De acuerdo con la respuesta sugerida por @dahlbyk. Si desea que el archivo diff se escriba en un archivo de diferencias para las revisiones de código, use el siguiente comando.
git diff branch master -- filepath/filename.extension > filename.diff --cached
Tengo un script que funciona bien en una rama y está roto en otra. Quiero ver las dos versiones una al lado de la otra y ver qué es diferente. ¿Hay alguna manera de hacer esto?
Para que quede claro, no estoy buscando una herramienta de comparación (uso Beyond Compare). Estoy buscando un comando git diff que me permita comparar la versión maestra con la versión actual de mi rama para ver qué ha cambiado. No estoy en medio de una fusión ni nada. Solo quiero decir algo como
git diff mybranch/myfile.cs master/myfile.cs
Hay muchas maneras de comparar archivos de dos ramas diferentes:
Opción 1: si desea comparar el archivo de una rama específica a otra rama específica:
git diff branch1name branch2name path/to/file
Ejemplo:
git diff mybranch/myfile.cs mysecondbranch/myfile.cs
En este ejemplo, está comparando el archivo en la rama "mybranch" al archivo en la rama "mysecondbranch".
Opción 2: Manera simple:
git diff branch1:file branch2:file
Ejemplo:
git diff mybranch:myfile.cs mysecondbranch:myfile.cs
Este ejemplo es similar a la opción 1.
Opción 3: si desea comparar su directorio de trabajo actual con alguna rama:
git diff ..someBranch path/to/file
Ejemplo:
git diff ..master myfile.cs
En este ejemplo, está comparando el archivo de su rama real al archivo en la rama maestra.
La mejor manera de hacerlo es usando git diff
de la siguiente manera: git diff <source_branch> <target_branch> -- file_path
Se comprobará la diferencia entre los archivos en esas ramas. Echa un vistazo a este artículo para obtener más información sobre los comandos git y cómo funcionan.
Para poder comparar dos archivos en el git bash necesitas usar el comando:
git diff <Branch name>..master -- Filename.extension
Este comando mostrará la diferencia entre los dos archivos en el mismo bash.
Puedes hacer esto: git diff branch1:file branch2:file
Si tiene configurado difftool, también puede: git difftool branch1:file branch2:file
Pregunta relacionada: ¿Cómo veo la salida de git diff con el programa visual diff?
Simplemente hago git diff branch1 branch2 path/to/file
Esto comprueba las diferencias entre los archivos. Los cambios en branch1
estarían en rojo. Los cambios en branch2
estarían en verde.
Se supone que branch1
es el pasado y branch2
es el futuro. Puede revertir esto invirtiendo el orden de las ramas en el diff: git diff branch2 branch1
Sintaxis más moderna:
git diff ..master path/to/file
El prefijo de doble punto significa "del directorio de trabajo actual a". También puede decir:
-
master..
, es decir, lo contrario de lo anterior. Esto es lo mismo quemaster
. -
mybranch..master
, que hace referencia explícita a un estado distinto del árbol de trabajo actual. -
v2.0.1..master
, es decir, hacer referencia a una etiqueta. -
[refspec]..[refspec]
, básicamente cualquier cosa identificable como un estado de código para git.
git diff
puede mostrarte la diferencia entre dos confirmaciones:
git diff mybranch master -- myfile.cs
O equivalente:
git diff mybranch..master -- myfile.cs
Usando la última sintaxis, si cualquiera de las partes es HEAD
se puede omitir (por ejemplo, master..
compara master
con HEAD
).
También te puede interesar mybranch...master
(de git diff
docs ):
Esta forma es para ver los cambios en la rama que contiene y hasta el segundo
<commit>
, comenzando en un antepasado común de ambos<commit>
.git diff A...B
es equivalente agit diff $(git-merge-base AB) B
En otras palabras, esto dará una diferencia de cambios en el master
ya que divergió de mybranch
(pero sin cambios nuevos desde entonces en mybranch
).
En todos los casos, el separador --
antes del nombre del archivo indica los indicadores de fin de línea de comando. Esto es opcional, a menos que Git se confunda si el argumento se refiere a una confirmación o un archivo, pero incluirlo no es un mal hábito. Consulte https://.com/a/13321491/54249 para ver algunos ejemplos.
Se pueden pasar los mismos argumentos a git difftool
si tiene uno configurado.