Git: ¿Cómo diferenciar dos archivos diferentes en diferentes ramas?

170

Tengo dos archivos diferentes en diferentes ramas. ¿Cómo puedo diferenciarlos en un solo comando?

Algo como

# git diff branch1/foo.txt branch2/foo-another.txt

Podría revisar el otro archivo, diferenciarlo y restaurarlo, pero esa es una solución bastante sucia.

Ondra Žižka
fuente
3
@EugenKonkov No es un duplicado porque esta pregunta es cómo diferenciar diferentes archivos en diferentes ramas. La pregunta vinculada solo pregunta cómo diferenciar el mismo archivo en diferentes ramas.
Steve

Respuestas:

214
git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt

También puede usar rutas relativas:

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt
twaggs
fuente
9
¡Increíble! Ciertamente no pude inferir eso git help diff. Por cierto, esos no tienen que ser nombres de rama antes de los dos puntos, sino que pueden ser cualquier tipo de referencias de confirmación (por ejemplo, valores SHA-1).
Steve Jorgensen
3
Nota importante: Git en Windows requiere que la especificación completa del elemento sea un nombre Unix. es decir, branch1: full \ path \ to \ foo.txt falla, mientras que branch1: full / path / to / foo.txt funciona bien, al igual que full \ path \ to \ foo.txt (sin rama)
Eris
use git difftooly luego suelte el branch2:y eso le permitirá editar un archivo en el árbol de trabajo actual (para traer los cambios branch1)
gMale
Probado en Linux con git versión 1.8.3.1, solo se permiten rutas relativas.
Sola Yang
21

Nota al margen: no necesita rutas completas, puede comenzar con ./rutas relativas. Puede ser útil a veces.

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt
Campa
fuente
2

Hay muchas formas de comparar archivos de dos sucursales diferentes. Por ejemplo:

  • Si el nombre es igual o diferente:

     git diff branch1:file branch2:file
    

    Ejemplo:

     git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
    
  • Solo si el nombre es el mismo y desea comparar su directorio de trabajo actual con alguna rama:

    git diff ..someBranch path/to/file
    

    Ejemplo:

    git diff ..branch2 full/path/to/foo.txt
    

    En este ejemplo, está comparando el archivo de su rama real con el archivo de la rama maestra.

Puede verificar esta respuesta:

Compare un archivo de dos sucursales diferentes en Git

Javier C.
fuente
1

Respuesta fuera de tema - ver comentarios

Solo para agregarlo, me parece una sintaxis muy sencilla:

git diff <branch1> <branch2> <filepath>

También funciona con referencias relativas como, por ejemplo:

# compare the previous committed state from HEAD with the state branch1 was 3 commits ago
git diff HEAD^ <branch1>~3 <filepath>
RomainValeri
fuente
1
El OP solicitó específicamente "archivos diferentes". Su respuesta es sobre comparar el mismo archivo en dos ramas diferentes.
Etienne Miret
@ EtienneMiret Tienes toda la razón, me perdí ese punto importante. Respuesta fuera de tema.
RomainValeri
-1

Puede especificar un inicio y un rango para git diffaplicar. El rango se indica con la ..notación.

branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path
JCF
fuente
Esto solo compara el mismo archivo en dos ramas; La pregunta era sobre dos archivos diferentes en dos ramas.
Piran