Pregunta ¿Cómo comparar archivos de dos ramas diferentes?


Tengo un script que funciona bien en una rama y se rompe en otra. Quiero ver las dos versiones una al lado de la otra y ver qué hay de diferente. ¿Hay alguna forma de hacer esto?

Para ser claro No estoy buscando una herramienta de comparación (yo uso Beyond Compare). Estoy buscando un comando de 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 el medio de una fusión ni nada. Solo quiero decir algo como

git diff mybranch/myfile.cs master/myfile.cs

1086
2017-11-04 18:04


origen


Respuestas:


git diff puede mostrarle la diferencia entre dos commits:

git diff mybranch master -- myfile.cs

O equivalente:

git diff mybranch..master -- myfile.cs

Usando la última sintaxis, si cualquier lado es HEAD puede ser omitido (p. master.. compara master a HEAD)

Usted también podría estar interesado en mybranch...master (de git diff documentos)

Esta forma es para ver los cambios en la rama que contiene y hasta el segundo <commit>, empezando por un ancestro común de ambos <commit>. git diff A...B es equivalente a git diff $(git-merge-base A B) B.

En otras palabras, esto dará una diferencia de cambios en master ya que divergió de mybranch (pero sin nuevos cambios desde entonces en mybranch)


En todos los casos, el -- separador antes de que el nombre del archivo indique el final de los indicadores de línea de comando. Esto es opcional a menos que Git se confunda si el argumento se refiere a un commit o a un archivo, pero incluirlo no es una mala costumbre. Ver https://stackoverflow.com/a/13321491/54249 para algunos ejemplos


Los mismos argumentos se pueden pasar a git difftool si tienes uno configurado


1573
2017-11-04 18:13



Puedes hacerlo: git diff branch1:file branch2:file

Si tiene difftool configurado, entonces también puede: git difftool branch1:file branch2:file

Pregunta relacionada: ¿Cómo veo la salida de git diff con el programa visual diff?


308
2017-11-04 18:12



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, el reverso de arriba. Esto es lo mismo que master.
  • mybranch..master, haciendo referencia explícitamente 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.

125
2018-06-25 00:41



Simplemente lo hago git diff branch1 branch2 path/to/file

Esto verifica las diferencias entre los archivos. Cambios en branch1 estaría en rojo Cambios en branch2 estaría en verde

Se supone que branch1 es el pasado y branch2 es el futuro Puede invertir esto invirtiendo el orden de las ramas en la diferencia: git diff branch2 branch1


8
2018-05-22 14:14



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" con el   archivo en la rama "mysecondbranch".

  • Opcion 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 actual de trabajo con alguna sucursal:

    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 en la rama principal.


7
2018-04-04 13:34



Estoy de acuerdo con la respuesta sugerida por @dahlbyk. Si desea que el diff se escriba en un archivo diff para revisiones de código, use el siguiente comando.

git diff branch master -- filepath/filename.extension > filename.diff --cached

2
2017-10-06 07:19



Para comparar dos archivos en el git bash necesitas usar el comando:

git diff ..master - Filename.extension

Este comando mostrará la diferencia en dos archivos en el bash mismo.


0
2018-01-17 04:26



La mejor manera de hacerlo es mediante el uso de git diff de la siguiente manera: git diff <source_branch> <target_branch> -- file_path

Verificará la diferencia entre los archivos en esas ramas. Eche un vistazo a este artículo para obtener más información sobre comandos git  y cómo funcionan


0
2018-05-07 12:18