196 votes

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

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 différencier et le restaurer, mais c'est une solution assez sale.

3 votes

@EugenKonkov Il ne s'agit pas d'un doublon car cette question demande comment faire une différence entre les deux. différents fichiers dans différentes branches. La question liée demande seulement comment différencier les même fichier dans différentes branches.

251voto

twaggs Points 983
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

11 votes

Génial ! Je n'étais certainement pas en mesure de déduire que de git help diff . Au fait, il n'est pas nécessaire que ce soit des noms de branches devant les deux points, mais il peut s'agir de n'importe quel type de références de commit (par exemple, des valeurs SHA-1).

3 votes

Note importante : Git sous Windows requiert que l'itempec complet soit un nom unix, c'est-à-dire branch1:full. \path\to\foo.txt échoue, alors que branch1:full/path/to/foo.txt fonctionne bien, de même que full \path\to\foo.txt (sans branche)

0 votes

Utiliser git difftool et ensuite laisser tomber le branch2: et cela vous permettra d'éditer un fichier dans l'arborescence de travail actuelle (pour reprendre les modifications de l'arborescence de travail actuelle). branch1 )

24voto

Campa Points 325

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

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

6voto

RomainValeri Points 10460

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>

2 votes

Le PO a spécifiquement demandé des "fichiers différents". Votre réponse concerne la comparaison du même fichier dans deux branches différentes.

0 votes

@EtienneMiret Vous avez tout à fait raison, j'ai manqué ce point important. Réponse hors sujet.

3voto

Javier C. Points 1938

Il existe de nombreuses façons de comparer des fichiers provenant 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
  • Seulement si le nom est le même et que vous voulez 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 actuelle à le fichier de la branche principale.

Vous pouvez vérifier cette réponse :

Comparer un fichier provenant de deux branches différentes dans Git

0voto

JCF Points 361

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

branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path

0 votes

Il s'agit uniquement de comparer le même fichier dans deux branches ; la question portait sur deux fichiers différents dans deux branches.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X