Cómo comparar archivos de dos ramas diferentes

Resuelto Micah asked hace 14 años • 14 respuestas

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
Micah avatar Nov 05 '10 01:11 Micah
Aceptado

git diffPuede 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.csen lugar de myfile.cs.

Usando la última sintaxis, si cualquiera de los lados HEADlo es, se puede omitir (por ejemplo, master..se compara mastercon HEAD).

También te puede interesar mybranch...master(de git diffla 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...Bes equivalente a git diff $(git-merge-base A B) B.

En otras palabras, esto dará una diferencia de los cambios desde masterque 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 difftoolsi tiene uno configurado.

dahlbyk avatar Nov 04 '2010 18:11 dahlbyk

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?

Tim Henigan avatar Nov 04 '2010 18:11 Tim Henigan

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 que master.
  • 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.
Joe Atzberger avatar Jun 25 '2015 00:06 Joe Atzberger

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.

Javier C. avatar Apr 04 '2018 13:04 Javier C.

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
Mouad Chaouki avatar Dec 20 '2021 13:12 Mouad Chaouki