git visual diff entre les branches


196

Cette réponse est idéale pour voir un diff visuel entre deux fichiers qui sont archivés dans git: Comment puis-je afficher la sortie 'git diff' avec un programme de diff visuel?

Cependant, j'aimerais voir un diff visuel entre deux branches. Jusqu'à présent, mon meilleur pari semble être:

git diff --name-status master dev

ce qui n'est pas très instructif et pas très visuel.

Y a-t-il quelque chose de mieux là-bas?


J'ai ajouté une réponse ci-dessous, y compris un visuel qui n'était auparavant pas abordé ici: comment voir quelles branches de commits contiennent (que ce soit en commun ou uniquement). Il y a beaucoup à faire avec les fonctionnalités de base de git. Il peut être utile de spécifier ce que vous souhaitez inclure dans votre différence visuelle. La plupart des réponses se concentrent sur les différences ligne par ligne des validations, où votre exemple se concentre sur les noms des fichiers affectés dans une validation donnée.
Kay V

Réponses:


227

À utiliser git diffavec une gamme .

git diff branch1..branch2

Cela permettra de comparer les conseils de chaque branche.

Si vous voulez vraiment un logiciel GUI, vous pouvez essayer quelque chose comme SourceTree qui prend en charge Mac OS X et Windows.


27
Ce n'est pas une biche visuelle. ;)
marines du

35
Dans les systèmes Linux, je recommande l'installation Meld, puis la définir comme valeur difftoolpar défaut avec git config --global diff.tool meldet enfin le lancer au lieu de plaine diffavec git difftool branch1..branch2. Le résultat est beaucoup plus joli.
Gabriel

8
en utilisant Meld visual difftool sans git config:git difftool -t meld branch1..branch2
user3780389

2
Pour les lecteurs: Depuis mon article, chaque réponse ici donne un moyen de faire ce que la personne a demandé (un diff dans une interface graphique) à l'exception de cette réponse.
G Huxley

3
@GHuxley où l'OP demande-t-il une solution GUI?
alex

97

Pour voir une différence visuelle de toutes les différences entre deux branches, j'aime fusionner les deux branches - SANS commettre la fusion - puis utiliser git guiou git Extensions pour obtenir un aperçu des différences.

Ligne de commande Git pour fusionner sans valider:

git checkout branchA
git merge --no-commit --no-ff branchB

Une fois terminé, vous pouvez annuler la fusion avec

git merge --abort

(h / t à @ jcugat pour le commentaire)


10
Ne sous-estimez pas la pertinence de cette approche si vous aimez utiliser votre IDE (ou un autre difftool GUI pas toujours facile à intégrer)! Cette option est géniale pour moi, car j'utilise Intellij et je préfère largement pouvoir parcourir les fichiers modifiés dans l'IDE, dans toute sa gloire mise en évidence par la syntaxe, mise en évidence par les erreurs, mise en évidence par le code mort, éditable sur place. J'utilise cette approche pour toutes mes révisions de code, et j'ai laissé l'outil de comparaison de demande de pull abyssal dans GitHub loin derrière. Je peux même apporter des modifications au fur et à mesure, et une fois terminé, je crée simplement une nouvelle branche avec "-code-review" ajouté et je valide!
kghastie

2
Cela fonctionne tant qu'il n'y a pas de conflits de fusion et échoue en cas de conflits de fusion.
Naga Kiran

1
J'aime beaucoup cette approche! De plus, au moins pour moi, git guicela montre les conflits comme non mis en scène, les non-conflits comme mis en scène, donc vous obtenez même une bonne distinction. Aide beaucoup plus pour moi que la réponse la mieux notée: D
DJGummikuh

55

Dans le cas où vous utilisez Intellij Idea IDE, vous pouvez simplement utiliser l'option de comparaison dans la branche.

entrez la description de l'image ici


existe-t-il des configurations / options / paramètres pour modifier cette comparaison? (comme --ignore-space-at-eol pour git diff)
Superole

49

Vous pouvez également le faire facilement avec gitk.

> gitk branch1 branch2

Cliquez d'abord sur la pointe de branch1. Maintenant, faites un clic droit sur la pointe de branch2 et sélectionnez Diff this-> selected.


7
L'utilisation de gitk branch1..branch2show uniquement valide les deux révisions.
T3rm1

en utilisant gitk (sans branch1 branch2) si vous voulez voir toutes les modifications que vous avez apportées à votre branche.
mikewasmike

31

Pour ceux d'entre vous sous Windows utilisant TortoiseGit, vous pouvez obtenir une comparaison quelque peu visuelle grâce à cette fonctionnalité plutôt obscure:

  1. Accédez au dossier que vous souhaitez comparer
  2. Maintenez enfoncé shiftet faites un clic droit dessus
  3. Allez dans TortoiseGit -> Parcourir la référence
  4. Utilisez ctrlpour sélectionner deux branches à comparer
  5. Faites un clic droit sur votre sélection et cliquez sur "Comparer les références sélectionnées"

Source: http://wikgren.fi/compare-diff-branches-in-tortoise-git-or-how-to-preview-changes-before-doing-a-merge/


Pourquoi devriez-vous maintenir Shift?
Zero3

1
Maintenir la touche Maj enfoncée tout en cliquant avec le bouton droit fait toujours apparaître le menu TortoiseGit complet, au cas où vous auriez configuré TortoiseGit pour ne pas afficher certains éléments.
Oversearch

C'est génial. Je souhaite que ce soit une caractéristique plus importante.
Drew

22

Si vous utilisez OSX ou Windows 7+, Atlassian SourceTree fonctionne très bien pour cela. Ce est gratuit.

Vous pouvez voir les modifications par étapes dans une configuration de diff côte à côte, et vous pouvez facilement comparer local avec distant et deux autres branches. Lorsque plusieurs fichiers sont sélectionnés, le diff s'affiche comme ci-dessous:

entrez la description de l'image ici

En supposant que vous avez extrait une branche de fonctionnalité et que vous souhaitez voir le diff par rapport à "master", faites un clic droit sur la branche "master" et sélectionnez "Diff contre courant"

Malheureusement, il ne semble pas comme si elle sera disponible sur les distributions * nix sitôt .


3
Il peut être «gratuit», mais il faut certainement un certain temps pour lire les conditions d'utilisation de leur enregistrement: atlassian.com/legal/customer-agreement J'ai jusqu'à présent aimé l'outil, mais cela peut me pousser.
akauppi

@akauppi Quelles parties vous rebutent? Je pensais que tous ces accords étaient à peu près les mêmes
alex

C'était il y a plus d'un an. Oui, les accords peuvent être similaires, mais c'est le processus que SourceTree m'a poussé à travers. C'était étrange. Passé, cependant. Je n'aurai pas les détails pour toi. Désolé
akauppi

16

Essayez «difftool» (en supposant que vous avez configuré les outils diff) - voir https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html

Je trouve que le statut du nom est bon pour le résumé mais difftool va itérer les changements (et l' -doption vous donne la vue du répertoire), par exemple

$ git difftool their-branch my-branch

Viewing: 'file1.txt'
Launch 'bc3' [Y/n]:
...

Ou comme @ rsilva4 l'a mentionné avec -det par défaut à votre branche actuelle, c'est juste - par exemple, comparer au maître:

$  git difftool -d master..

... et oui - il existe de nombreuses variantes - https://www.kernel.org/pub/software/scm/git/docs/git-reset.html


3
Merci, c'était utile. L'ajout de l'option -d améliorera encore les choses:git difftool -d their-abc my-abc
rsilva4

Étant donné qu'expliquehell.com ne semble pas être en mesure d'analyser l'option -d pour le moment, voici ce que dit la page de -d --dir-diff: Copy the modified files to a temporary location and perform a directory diff on them. This mode never prompts before launching the diff tool.
manuel

8

Si vous utilisez github, vous pouvez utiliser le site Web pour cela:

github.com/url/to/your/repo/compare/SHA_of_tip_of_one_branch...SHA_of_tip_of_another_branch

Cela vous montrera une comparaison des deux.


Cela fonctionne (je le fais tout le temps) mais cela vous oblige à pousser votre code vers le dépôt github. À mon avis, ce n'est pas vraiment une mise en garde acceptable.
adamwong246

2
ou juste github.com/url/to/your/repo/compare/et ensuite vous pouvez sélectionner les branches
caramba

Et comment puis-je obtenir ce SHA? Je veux dire, que signifie SHA du bout d'une branche?
Optimus Prime

8

Dans GitExtensions, vous pouvez sélectionner les deux branches dans la grille de révision en appuyant Ctrlsur. Ensuite, vous pouvez voir les fichiers qui diffèrent entre ces branches. Lorsque vous sélectionnez un fichier, vous verrez un diff pour lui.

Pris d' ici


J'ai 2 branches sélectionnées dans ma grille de révision, mais je ne vois aucune commande de comparaison dans le menu en haut ou lorsque je fais un clic droit.
Eric

1
Je l'ai trouvé dans les en-têtes du volet inférieur. Il existe Commit, File tree et Diff.
Eric

7

METTRE À JOUR

Mac: J'utilise maintenant SourceTree. Je le recommande vivement. J'aime particulièrement la façon dont vous pouvez mettre en scène / déchaîner des mecs.

Linux: j'ai eu du succès avec:

  • smartgit
  • GitKraken
  • meld

Par exemple pour installer smartgitsur Ubuntu:


Cela fait le travail:

git-diffall avec un outil GUI diff comme meld. Voir le point 5 ici:

http://rubyglazed.com/post/15772234418/git-ify-your-command-line

Il y a un bon article sur git et meld ici: http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy


4

Si vous utilisez Eclipse, vous pouvez comparer visuellement votre branche actuelle sur l'espace de travail avec une autre balise / branche:

Espace de travail Eclipse comparer


Personnellement, je trouve le support Eclipse pour les sous-normes différentes, mais si c'est tout ce que vous avez, c'est OK.
2017

4

Vous pouvez également utiliser le P4Merge gratuit de Perforce:

http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools

entrez la description de l'image ici

Les détails sur son intégration avec Git peuvent être trouvés ici et ici

mais un résumé rapide des liens ci-dessus est:

  • Mettez les bits suivants dans votre ~ / .gitconfig, et ensuite vous pouvez faire $ git mergetool et $ git difftoolutiliser p4merge
  • Notez que $ git diff utiliserez toujours le visualiseur de différences en ligne par défaut :) (testé avec git version 1.8.2)

Changements pour .gitconfig

[merge]
  keepBackup = false
    tool = p4merge
[mergetool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$PWD/$BASE\"" "\"$PWD/$REMOTE\"" "\"$PWD/$LOCAL\"" "\"$PWD/$MERGED\""
    keepTemporaries = false
    trustExitCode = false
    keepBackup = false
[diff]
    tool = p4merge
[difftool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$REMOTE\"" "\"$LOCAL\""

2

Si vous utilisez l'excellent éditeur WebStorm, vous pouvez comparer avec n'importe quelle branche que vous souhaitez: Webstorm git comparer


En fait, je viens de remarquer qu'IntelliJ IDEA (probablement aussi WebStorm) a la capacité de "mettre en évidence les commits non sélectionnés", ce qui rend très clair les commits qui existent dans la branche mais pas dans une autre.
arthurakay

Oui, je viens d'utiliser Intellij pour supprimer de manière sélective des charges de modifications apportées à un référentiel par "mise en forme automatique lors de l'enregistrement". C'était très facile ... J'ai dû trouver l'option "Comparer avant avec local" pour le faire
Tom H

1

Jettes un coup d'oeil à git show-branch

Il y a beaucoup à faire avec les fonctionnalités de base de git. Il peut être utile de spécifier ce que vous souhaitez inclure dans votre différence visuelle. La plupart des réponses se concentrent sur les différences ligne par ligne des validations, où votre exemple se concentre sur les noms des fichiers affectés dans une validation donnée.

Un visuel qui ne semble pas être abordé est de savoir comment voir les commits que contiennent les branches (que ce soit en commun ou uniquement).

Pour ce visuel, je suis un grand fan de git show-branch; il éclate une table de commits bien organisée par branche vers l'ancêtre commun. - pour l'essayer sur un dépôt avec plusieurs branches avec divergences, il suffit de taper git show-branchet de vérifier la sortie - pour un résumé avec des exemples, voir Comparer les validations entre les branches Git


0

Voici comment voir la différence visuelle entre des validations entières, par opposition à des fichiers uniques, dans Visual Studio (testé dans VS 2017). Malheureusement, cela ne fonctionne que pour les validations au sein d'une branche: dans "Team Explorer", choisissez la vue "Branches", cliquez avec le bouton droit sur le dépôt et choisissez "Afficher l'historique" comme dans l'image suivante.

entrez la description de l'image ici

L'historique de la branche actuelle apparaît alors dans la zone principale. (Les branches qui se terminaient par des validations antérieures sur la branche actuelle sont marquées par des étiquettes.) Sélectionnez maintenant quelques validations avec Ctrl-Gauche, puis cliquez avec le bouton droit et sélectionnez "Comparer les validations ..." dans le menu contextuel.

Pour en savoir plus sur la comparaison des branches dans le monde Microsoft, consultez cette question de stackoverflow: différences entre les branches git à l'aide de Visual Studio .


1
Affiche uniquement l'historique d'une seule branche, donc ne peut pas comparer entre les branches.
Michał Fita

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.