Git: Comment différencier deux fichiers différents dans des branches différentes?

170

J'ai deux fichiers différents dans des branches différentes. Comment puis-je les différencier en une seule commande?

Quelque chose comme

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

Je pourrais vérifier l'autre fichier, le comparer et le restaurer, mais c'est une solution assez sale.

Ondra Žižka
la source
3
@EugenKonkov Ce n'est pas un doublon car cette question demande comment différencier différents fichiers dans différentes branches. La question liée demande uniquement comment différencier le même fichier dans différentes branches.
Steve

Réponses:

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

Vous pouvez également utiliser des chemins relatifs:

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt
twaggs
la source
9
Impressionnant! Je n'ai certainement pas pu en déduire git help diff. Au fait, ceux-ci ne doivent pas nécessairement être des noms de branche avant les deux-points, mais peuvent être n'importe quel type de références de validation (par exemple, les valeurs SHA-1).
Steve Jorgensen le
3
Remarque importante: Git sur Windows nécessite que la spécification d'éléments complète soit un nom unix. ie branch1: full \ path \ to \ foo.txt échoue, tandis que branch1: full / path / to / foo.txt fonctionne correctement, tout comme full \ path \ to \ foo.txt (pas de branche)
Eris
utilisez git difftoolpuis déposez le branch2:et qui vous permettra d'éditer un fichier dans l'arborescence de travail actuelle (pour apporter les modifications à partir de branch1)
gMale
Essayé sous linux avec la version git 1.8.3.1, seuls les chemins relatifs sont autorisés.
Sola Yang du
21

Sidenote: pas besoin de chemins complets, vous pouvez commencer par ./des chemins relatifs. Cela peut parfois être pratique.

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

Il existe de nombreuses façons de comparer des fichiers de deux branches différentes. Par exemple:

  • Si le nom est identique ou différent:

     git diff branch1:file branch2:file
    

    Exemple:

     git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
    
  • Uniquement si le nom est le même et que vous souhaitez comparer votre répertoire de travail actuel à une branche:

    git diff ..someBranch path/to/file
    

    Exemple:

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

    Dans cet exemple, vous comparez le fichier de votre branche réelle au fichier de la branche principale.

Vous pouvez vérifier cette réponse:

Comparez un fichier de deux branches différentes dans Git

Javier C.
la source
1

Réponse hors sujet - voir les commentaires

Juste pour l'ajouter car je trouve que c'est une syntaxe très simple:

git diff <branch1> <branch2> <filepath>

Fonctionne également avec des références relatives comme par exemple:

# compare the previous committed state from HEAD with the state branch1 was 3 commits ago
git diff HEAD^ <branch1>~3 <filepath>
RomainValeri
la source
1
Le PO a spécifiquement demandé des «fichiers différents». Votre réponse consiste à comparer le même fichier dans deux branches différentes.
Etienne Miret
@EtienneMiret Vous avez parfaitement raison, j'ai raté ce point important. Réponse hors sujet.
RomainValeri
-1

Vous pouvez spécifier un début et une plage git diffà appliquer. La plage est indiquée par la ..notation.

branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path
JCF
la source
Il s'agit uniquement de comparer le même fichier dans deux branches; la question portait sur deux fichiers différents dans deux branches.
Piran