web-dev-qa-db-fra.com

Comment comparer des fichiers de deux branches différentes?

J'ai un script qui fonctionne bien dans une branche et est cassé dans une autre. Je veux regarder les deux versions côte à côte et voir ce qui est différent. Y a-t-il des moyens de le faire?

Pour être clair Je ne cherche pas d'outil de comparaison (j'utilise Beyond Compare). Je cherche une commande git diff qui me permettra de comparer la version principale à la version actuelle de ma branche pour voir ce qui a changé. Je ne suis pas en train de fusionner ou quoi que ce soit. Je veux juste dire quelque chose comme 

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

git diff peut vous montrer la différence entre deux commits:

git diff mybranch master -- myfile.cs

Ou équivalent:

git diff mybranch..master -- myfile.cs

Si vous utilisez la dernière syntaxe, si l'un des côtés est HEAD, vous pouvez l'omettre (par exemple, master.. compare master à HEAD).

mybranch...master (from git diff docs ) peut aussi vous intéresser:

Ce formulaire permet d’afficher les modifications apportées à la branche contenant et jusqu’au second <commit>, en partant d’un ancêtre commun aux deux <commit>. git diff A...B est équivalent à git diff $(git-merge-base A B) B.

En d'autres termes, cela donnera un diff des changements dans master puisqu'il a divergé de mybranch (mais sans nouveaux changements depuis lors dans mybranch).


Dans tous les cas, le séparateur -- avant le nom du fichier indique les indicateurs de fin de ligne de commande. Ceci est facultatif à moins que Git ne s'embrouille si l'argument fait référence à un commit ou à un fichier, mais l'inclure n'est pas une mauvaise habitude. Voir https://stackoverflow.com/a/13321491/54249 pour quelques exemples.


Les mêmes arguments peuvent être passés à git difftool si vous en avez un configuré.

1781
dahlbyk

Vous pouvez faire ceci: git diff branch1:file branch2:file

Si vous avez configuré difftool, vous pouvez aussi: git difftool branch1:file branch2:file

Question associée: Comment puis-je afficher le résultat de git diff avec un programme de diff visuel

341
Tim Henigan

Syntaxe plus moderne:

git diff ..master path/to/file

Le préfixe à double point signifie "du répertoire de travail actuel à". Vous pouvez également dire:

  • master.., c’est-à-dire l’inverse de ce qui précède. Ceci est identique à master.
  • mybranch..master, référençant explicitement un état autre que l'arbre de travail actuel.
  • v2.0.1..master, c’est-à-dire référencer une balise.
  • [refspec]..[refspec], essentiellement tout ce qui est identifiable comme un état de code à git.
135
Joe Atzberger

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

  • Option 1: Si vous souhaitez comparer le fichier d'une branche spécifique à une autre branche spécifique:

    git diff branch1name branch2name path/to/file
    

    Exemple:

    git diff mybranch/myfile.cs mysecondbranch/myfile.cs
    

    Dans cet exemple, vous comparez le fichier de la branche «mybranch» au fichier fichier dans la branche «mysecondbranch».

  • Option 2:Moyen simple:

     git diff branch1:file branch2:file
    

    Exemple:

     git diff mybranch:myfile.cs mysecondbranch:myfile.cs
    

    Cet exemple est similaire à l'option 1.

  • Option 3: Si vous souhaitez comparer votre répertoire de travail actuel à une branche:

    git diff ..someBranch path/to/file
    

    Exemple:

    git diff ..master myfile.cs
    

    Dans cet exemple, vous comparez le fichier de votre branche actuelle à le fichier dans la branche master.

15
Javier C.

Je fais simplement git diff branch1 branch2 path/to/file

Ceci vérifie les différences entre les fichiers. Les changements dans branch1 seraient en rouge. Les changements dans branch2 seraient en vert.

Il est supposé que branch1 est le passé et branch2 est le futur. Vous pouvez inverser cela en inversant l'ordre des branches dans le diff: git diff branch2 branch1

8
iGbanam

En accord avec la réponse suggérée par @dahlbyk. Si vous souhaitez que le fichier diff soit écrit dans un fichier diff pour les révisions de code, utilisez la commande suivante.

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

Si vous voulez créer un diff avec la branche en cours, vous pouvez l'omettre et utiliser:

git diff BRANCH -- path/to/file 

de cette façon, il diffère de la branche actuelle à la branche référencée (BRANCH).

1
Paulo Fidalgo

Dans mon cas, j'utilise la commande ci-dessous:

git diff <branch name> -- <path + file name>

Cette commande peut vous aider à comparer le même fichier dans deux branches différentes.

1
SKT

La meilleure façon de le faire est d'utiliser git diff de la manière suivante: git diff <source_branch> <target_branch> -- file_path

Il vérifiera la différence entre les fichiers de ces branches. Jetez un coup d'oeil à cet article pour plus d'informations sur les commandes git et leur fonctionnement.

0
Nesha Zoric

Utilisez les hachages de commit comme ceci:

git diff <hash1> <hash2> <filename>

hash1 peut être n'importe quel commit de n'importe quelle branche, la même chose pour hash2 .

0
prometeu

Afin de comparer deux fichiers dans git bash, vous devez utiliser la commande:

git diff <Branch name>..master -- Filename.extension   

Cette commande montrera la différence entre les deux fichiers dans le bash lui-même.

0
Rishav_SO