Cómo comparar archivos de dos ramas diferentes
Tengo un script que funciona bien en una rama y no funciona en otra. Quiero ver las dos versiones una al lado de la otra y ver qué es diferente. ¿Hay alguna forma de hacer esto?
Para ser claros , 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 mi versión de rama actual para ver qué ha cambiado. No estoy en medio de una fusión ni nada por el estilo. Sólo quiero decir algo como
git diff mybranch/myfile.cs master/myfile.cs
git diff
Puede mostrarte la diferencia entre dos confirmaciones:
git diff mybranch master -- myfile.cs
O equivalente:
git diff mybranch..master -- myfile.cs
Tenga en cuenta que debe especificar la ruta relativa al archivo. Entonces, si el archivo estuviera en el directorio src, dirías src/myfile.cs
en lugar de myfile.cs
.
Usando la última sintaxis, si cualquiera de los lados HEAD
lo es, se puede omitir (por ejemplo, master..
se compara master
con HEAD
).
También te puede interesar mybranch...master
(de git diff
la documentación ):
Este formulario es para ver los cambios en la rama que contiene y hasta la segunda
<commit>
, comenzando en un ancestro común de ambas<commit>
.git diff A...B
es equivalente agit diff $(git-merge-base A B) B
.
En otras palabras, esto dará una diferencia de los cambios desde master
que divergió mybranch
(pero sin nuevos cambios desde entonces en mybranch
).
En todos los casos, el --
separador antes del nombre del archivo indica el final de los indicadores de la línea de comando (tenga en cuenta el espacio entre el separador y el nombre del archivo). 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 la respuesta de Dietrich Epp al significado de los guiones dobles de pago de Git para ver algunos ejemplos.
Se pueden pasar los mismos argumentos git difftool
si tiene uno configurado.
Puedes hacerlo:
git diff branch1:path/to/file branch2:path/to/file
Si tiene configurado difftool, también puede:
git difftool branch1:path/to/file branch2:path/to/file
Pregunta relacionada: ¿Cómo veo la salida de 'git diff' con mi herramienta/visor de diferencias preferido?
Sintaxis más moderna:
git diff ..master path/to/file
El prefijo de doble punto significa "desde el directorio de trabajo actual hasta". También puede decir:
master..
, es decir, lo contrario de lo anterior. Esto es lo mismo quemaster
.mybranch..master
, haciendo referencia explícita a un estado distinto del árbol de trabajo actual.v2.0.1..master
, es decir, haciendo referencia a una etiqueta.[refspec]..[refspec]
, básicamente cualquier cosa identificable como un estado de código para Git.
Hay muchas formas de comparar archivos de dos ramas diferentes:
Opción 1: si desea comparar el archivo de n rama específica con 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" con el archivo en la rama "my secondbranch".
Opción 2: Manera sencilla:
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 con el archivo de la rama maestra.
Para Visual Studio Code recomiendo encarecidamente la extensión:
Documentos de diferencias de historial de Git
¡Puedes usarlo para comparar entre archivos o incluso ramas!
Desde la consola, simplemente puedes usar este comando:
git diff <Your_Branch> <Branch_To_Compare_With> -- myfile.cs