git differenza visiva tra i rami


196

Questa risposta è ottima per vedere una differenza visiva tra due file che sono controllati in git: Come posso vedere l'output di 'git diff' con un programma di diff visiva?

Tuttavia, mi piacerebbe vedere una differenza visiva tra due rami. Finora, la mia scommessa migliore sembra essere:

git diff --name-status master dev

che non è molto istruttivo e non molto visivo.

C'è qualcosa di meglio là fuori?


Di seguito ho aggiunto una risposta che include un elemento visivo precedentemente non indirizzato qui: come vedere quali commit contengono i rami (sia in comune che in modo univoco). C'è molto che puoi fare con la funzionalità core git. Potrebbe essere utile specificare cosa desideri includere nel tuo diff visivo. La maggior parte delle risposte si concentra su differenze di commit riga per riga, in cui l'esempio si concentra sui nomi dei file interessati in un determinato commit.
Kay V,

Risposte:


227

Utilizzare git diffcon un intervallo .

git diff branch1..branch2

Questo confronterà i suggerimenti di ciascun ramo.

Se vuoi davvero un po 'di software GUI, puoi provare qualcosa come SourceTree che supporta Mac OS X e Windows.


27
Non è una daina visiva. ;)
Marines

35
Nei sistemi Linux consiglio di installarlo Meld, quindi impostarlo come predefinito difftoolcon git config --global diff.tool melde infine avviarlo invece che diffcon git difftool branch1..branch2. Il risultato è molto più bello.
Gabriel,

8
usando Meld visual difftool senza git config:git difftool -t meld branch1..branch2
user3780389

2
Per i lettori: a partire dal mio post, ogni risposta qui offre un modo per fare ciò che la persona ha chiesto (un diff in una GUI) ad eccezione di questa risposta.
G Huxley,

3
@GHuxley dove l'OP richiede una soluzione GUI?
alex

97

Per vedere una differenza visiva di tutte le differenze tra due rami mi piace unire i due rami - SENZA commettere l'unione - e quindi usare git guio git Extensions per avere una visione d'insieme delle differenze.

Riga di comando Git per l'unione senza commit:

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

Quindi, quando hai finito, puoi annullare l'unione con

git merge --abort

(h / t da @ jcugat per il commento)


10
Non sottovalutare la pertinenza di questo approccio se ti piace usare il tuo IDE (o altro difftool GUI non sempre facile da integrare)! Questa opzione è fantastica per me, dal momento che utilizzo Intellij e preferisco di gran lunga essere in grado di scorrere i file modificati nell'IDE, in tutta la sua gloria evidenziata dalla sintassi, evidenziata da errori, evidenziata con codice morto, modificabile sul posto. Uso questo approccio per tutte le mie revisioni del codice e ho lasciato molto indietro lo strumento di confronto delle richieste pull pull in GitHub. Posso anche apportare modifiche mentre procedo, e una volta fatto creo un nuovo ramo con "-code-review" aggiunto e commesso!
kghastie,

2
Funziona finché non ci sono conflitti di unione e fallisce quando ci sono conflitti di unione.
Naga Kiran,

1
Mi piace molto questo approccio! Inoltre, almeno per me git gui, mostra i conflitti come non messi in scena, i non conflitti come messi in scena, quindi anche tu fai una buona distinzione. Aiuta molto di più per me rispetto alla risposta più votata: D
DJGummikuh

55

Nel caso in cui utilizzi Intellij Idea IDE, puoi semplicemente utilizzare l'opzione di confronto nel ramo.

inserisci qui la descrizione dell'immagine


ci sono configurazioni / opzioni / impostazioni per modificare questo confronto? (come --ignore-space-at-eol per git diff)
Superole il

49

Puoi anche farlo facilmente con gitk.

> gitk branch1 branch2

Primo clic sulla punta del ramo 1. Ora fai clic destro sulla punta di branch2 e seleziona Diff this-> selezionato.


7
L'uso gitk branch1..branch2mostra solo i commit tra le due revisioni.
T3rm1,

usando gitk (senza branch1 branch2) se vuoi vedere tutte le modifiche che hai fatto nel tuo branch.
mikewasmike,

31

Per quelli di voi su Windows che usano TortoiseGit, è possibile ottenere un confronto un po 'visivo attraverso questa caratteristica piuttosto oscura:

  1. Passare alla cartella che si desidera confrontare
  2. Tieni premuto shifte fai clic destro
  3. Vai a TortoiseGit -> Sfoglia riferimenti
  4. Utilizzare ctrlper selezionare due rami da confrontare
  5. Fai clic con il pulsante destro del mouse sulla selezione e fai clic su "Confronta i riferimenti selezionati"

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


Perché dovresti tenere premuto MAIUSC?
Zero3

1
Tenendo premuto il tasto MAIUSC mentre si fa clic con il pulsante destro del mouse, viene sempre visualizzato il menu TortoiseGit completo, nel caso in cui TortoiseGit sia stato configurato in modo da non mostrare determinati elementi.
Oversearch

Questo e spettacolare. Vorrei che fosse una caratteristica più importante.
Drew

22

Se stai usando OSX o Windows 7+, Atlassian SourceTree funziona molto bene per questo. È gratis.

È possibile visualizzare le modifiche temporanee in una configurazione diff side-by-side e confrontare facilmente locale con remoto e altri due rami. Quando sono selezionati più file, il diff si presenta come di seguito:

inserisci qui la descrizione dell'immagine

Supponendo che tu abbia verificato un ramo di funzionalità e desideri vedere il diff rispetto a "master", fai clic con il pulsante destro del mouse sul ramo "master" e seleziona "Diff contro corrente"

Purtroppo, non sembra come se sarà disponibile su distribuzioni * nix in qualunque momento presto .


3
Potrebbe essere "gratuito", ma certamente richiede del tempo per leggere le loro Condizioni d'uso di registrazione: atlassian.com/legal/customer-agreement Finora mi è piaciuto lo strumento, ma questo potrebbe spingermi via.
akauppi,

@akauppi Quali parti ti hanno scoraggiato? Pensavo che tutti quegli accordi fossero più o meno gli stessi
alex

È successo più di un anno fa. Sì, gli accordi possono essere simili ma era il processo che SourceTree mi stava spingendo. Era strano. Passato, però. Non avrò i dettagli per te. Siamo spiacenti
akauppi il

16

Prova "difftool" (supponendo che tu abbia una configurazione di strumenti diff) - vedi https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html

Trovo che lo stato del nome sia buono per il riepilogo, ma difftool ripeterà le modifiche (e l' -dopzione ti dà la vista della directory), ad es.

$ git difftool their-branch my-branch

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

O come menzionato da @ rsilva4 -de predefinito per il tuo ramo attuale è solo - ad esempio confronta con master:

$  git difftool -d master..

... e sì - ci sono molte varianti - https://www.kernel.org/pub/software/scm/git/docs/git-reset.html


3
Grazie, questo è stato utile. L'aggiunta dell'opzione -d renderà le cose ancora migliori:git difftool -d their-abc my-abc
rsilva4

Dal momento che esplicativo.com non sembra essere in grado di analizzare l'opzione -d al momento, ecco cosa dice la manpage:-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.
waldyrious

8

Se stai usando github puoi usare il sito web per questo:

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

Questo ti mostrerà un confronto tra i due.


Funziona (lo faccio sempre) ma richiede di inviare il codice al repository github. Questo non è un avvertimento accettabile secondo me, comunque.
adamwong246,

2
o solo github.com/url/to/your/repo/compare/e poi puoi selezionare i rami
caramba

E come posso ottenere questo SHA? Voglio dire, cosa significa SHA della punta di un ramo?
Optimus Prime,

8

In GitExtensions è possibile selezionare entrambi i rami nella griglia di revisione con Ctrlpremuto. Quindi puoi vedere i file che differiscono tra quei rami. Quando selezioni un file vedrai diff per esso.

Tratto da qui


Ho 2 rami selezionati nella mia griglia di revisione, ma non vedo alcun comando di confronto nel menu in alto o quando faccio un clic destro.
Eric,

1
L'ho trovato nelle intestazioni del riquadro inferiore. Ci sono Commit, File tree e Diff.
Eric,

7

AGGIORNARE

Mac: ora uso SourceTree. Altamente raccomandato. Mi piace soprattutto il modo in cui puoi mettere in scena / mettere in scena pezzi.

Linux: ho avuto successo con:

  • SmartGit
  • GitKraken
  • meld

Ad esempio per installare smartgitsu Ubuntu:


Questo fa il lavoro:

git-diffall con uno strumento diff GUI come la fusione. Vedi il punto 5 qui:

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

C'è un bel post su git e fusione qui: http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy


4

Se usi Eclipse puoi confrontare visivamente il tuo ramo corrente nell'area di lavoro con un altro tag / ramo:

Confronto dell'area di lavoro Eclipse


Personalmente trovo il supporto di Eclipse per il sottoparagrafo diffing, ma se questo è tutto ciò che hai allora va bene.
Sì,

4

Puoi anche usare il P4Merge gratuito di Perforce per fare questo:

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

inserisci qui la descrizione dell'immagine

I dettagli sull'integrazione con Git sono disponibili qui e qui

ma un breve riepilogo dai link sopra è:

  • Inserisci i seguenti bit nel tuo ~ / .gitconfig, quindi puoi fare $ git mergetoole $ git difftoolusare p4merge
  • Nota che $ git diffcontinuerà a utilizzare il visualizzatore diff inline predefinito :) (testato con la versione 1.8.2 di git)

Modifiche per .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

Se usi l'eccellente editor WebStorm, puoi confrontare con qualsiasi ramo che desideri: Webstorm git compare


In realtà ho appena notato che IntelliJ IDEA (presumibilmente anche WebStorm) ha la capacità di "Evidenziare commit non selezionati", il che rende molto chiaro quali commit esistono nel ramo ma non un altro.
Arturakay,

Sì, ho appena usato intellij per eliminare selettivamente un sacco di modifiche apportate in un repository da "formattazione automatica al salvataggio". È stato molto semplice ... Ho dovuto trovare l'opzione "Confronta prima con locale" per farlo
Tom H

1

Dai un'occhiata a git show-branch

C'è molto che puoi fare con la funzionalità core git. Potrebbe essere utile specificare cosa desideri includere nel tuo diff visivo. La maggior parte delle risposte si concentra su differenze di commit riga per riga, in cui l'esempio si concentra sui nomi dei file interessati in un determinato commit.

Un elemento visivo che sembra non essere affrontato è come vedere i commit che contengono i rami (sia in comune che in modo univoco).

Per questa immagine, sono un grande fan di git show-branch; espone una tabella ben organizzata di commit per ramo all'antenato comune. - per provarlo su un repository con più rami con divergenze, basta digitare git show-branche controllare l'output - per un writeup con esempi, vedere Confronta i commit tra i rami Git


0

Ecco come visualizzare la differenza visiva tra tutti i commit, anziché i singoli file, in Visual Studio (testato in VS 2017). Sfortunatamente, funziona solo per i commit all'interno di un ramo: in "Team Explorer", seleziona la vista "Rami", fai clic con il pulsante destro del mouse sul repository e scegli "Visualizza cronologia" come nell'immagine seguente.

inserisci qui la descrizione dell'immagine

Quindi la cronologia del ramo corrente appare nell'area principale. (Dove i rami che si sono conclusi come commit precedenti sul ramo corrente sono contrassegnati da etichette). Ora seleziona un paio di commit con Ctrl-Sinistra, quindi fai clic con il pulsante destro del mouse e seleziona "Confronta commit ..." dal menu a comparsa.

Per ulteriori informazioni sul confronto dei rami nel mondo Microsoft, vedere questa domanda stackoverflow: Differenze tra i rami git usando Visual Studio .


1
Mostra solo la cronologia di un singolo ramo, quindi non è possibile confrontare tra i rami.
Michał Fita,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.