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.


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

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

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


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>

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.