Trovare diff tra la versione corrente e l'ultima


670

Usando Git, come puoi trovare la differenza tra l'attuale e l'ultima versione?

git diff last version:HEAD

1
Se usi GitHub per l'ubicazione cloud del tuo repository, è molto semplice: vai al tuo progetto e fai clic sull'intestazione "commit" nella tabella che mostra il tuo progetto
David Lundquist,

1
Il significato di "attuale e l'ultima versione" dovrebbe davvero essere chiarito nella domanda.
faintsignal,

Risposte:


1171

Non capisco davvero il significato di "ultima versione".

Dato che è possibile accedere al commit precedente con HEAD ^, penso che tu stia cercando qualcosa come:

git diff HEAD^ HEAD

A partire da Git 1.8.5, @è un alias per HEAD, quindi puoi usare:

git diff @~..@

Funzionerà anche:

git show

Se vuoi conoscere la differenza tra head e qualsiasi commit puoi usare:

git diff commit_id HEAD

E questo avvierà il tuo strumento diff visivo (se configurato):

git difftool HEAD^ HEAD

Poiché il confronto con HEAD è predefinito, puoi ometterlo (come sottolineato da Orient ):

git diff @^
git diff HEAD^
git diff commit_id

Avvertenze

  • @ScottF e @Panzercrisis spiegano nei commenti che su Windows il ~personaggio deve essere usato al posto di ^.

Volevo qualcosa di simile alla versione impegnata e alla versione precedente ... git diff head head-1
Rajeev

7
A partire da Git 1.8.5, @è un alias per HEAD. E poiché ~e ^sono gli stessi quando si esegue solo un commit indietro, trovo git diff @~..@molto più facile da digitare.
Andrew,

80
@Andrew git showè ancora più facile, poiché @~..@è la cosa predefinita da mostrare.
amalloy,

3
git showstampa semplicemente il messaggio di commit, non genera una diff delle modifiche specifiche, almeno in Git 2.5.4 (Apple Git-61), quindi in realtà non sarebbe una risposta alla domanda del PO.
user1944491

1
Il problema git showè che se si HEADtratta di un commit di merge non otterrai ciò che ti aspetti dal momento che il commit di merge stesso potrebbe non avere alcuna modifica. git diff HEAD^ HEADmostrerà le modifiche effettive tra le versioni
RubenLaguna,

158

Supponendo che "versione corrente" sia la directory di lavoro (modifiche senza commit) e "ultima versione" sia HEAD(ultime modifiche impegnate per il ramo corrente), semplicemente

git diff HEAD

Il merito di quanto segue va all'utente Cerran.

E se salti sempre l'area di gestione temporanea con -aquando esegui il commit, puoi semplicemente utilizzare git diff.

Sommario

  1. git diff mostra le modifiche non messe in scena.
  2. git diff --cached mostra le modifiche organizzate.
  3. git diff HEAD mostra tutte le modifiche (sia in scena che non in scena).

Fonte: Pagina di manuale git-diff (1) - Cerran


16
E se salti sempre l'area di gestione temporanea con -aquando esegui il commit, puoi semplicemente utilizzare git diff. <1> git diffmostra le modifiche non messe in scena . <2> git diff --cachedmostra le modifiche graduali . <3> git diff HEADmostra tutte le modifiche (sia in scena che non in scena). Fonte: Pagina di manuale git-diff (1)
Cerran,

1
Questa dovrebbe essere la risposta accettata perché risponde all'intento della domanda.
tgoneil,

Qual è il nome di "l'attuale versione non gestita" in git? C'è davvero un nome?
Mathieu CAROFF,

118

Come sottolineato da un commento di amalloy , se per "versioni attuali e ultime" intendi l'ultimo commit e il commit precedente, puoi semplicemente usare

git show

5
Questo è quello che stavo cercando. Bella risposta.
CodeManiak,

12
Utilizzare git show HEAD~1per mostrare l'ultimo commit tranne uno git show HEAD~2, ecc. Per i commit più vecchi. Mostra solo un singolo file tramite git show HEAD~2 my_file.
Florian Brucker

60

Differenza tra l'ultimo ma un commit e l'ultimo commit (più l'eventuale stato corrente):

git diff HEAD~

o anche (più facile da digitare)

git diff @~

dove @è il sinonimo HEADdel ramo corrente e ~significa "dammi il genitore della revisione citata".


Mi piace abbastanza git diff HEAD^(piuttosto che la HEAD~forma equivalente ). È un po 'più facile da ricordare per un "vecchio idiota" come me ;-)
sxc731

3
La carota è un problema in alcuni terminali. Bello avere l'opzione
light24bulbs

1
La risposta potrebbe essere migliorata spiegando il significato ~e il @significato.
Bob Stein,

1
Se vogliamo solo verificare ciò che è stato impegnato nell'ultimo commit, non utilizzarlo (poiché le modifiche sporche influiscono sul diff). Una sintassi più breve per davvero diff HEAD^ HEADdovrebbe essere git diff @^!. Vedi git-scm.com/docs/gitrevisions perr1^!
Johnny Wong il

@JohnnyWong Grazie per il chiarimento. Ho citato "stato attuale" per non confondere i lettori.
Tomilov Anatoliy,

53

Puoi farlo anche in questo modo:

Confronta con il commit precedente

git diff --name-status HEAD~1..HEAD

Confronta con i due commit attuali e precedenti

git diff --name-status HEAD~2..HEAD

16

Usa la cachedbandiera se hai aggiunto, ma non hai ancora eseguito il commit:

git diff --cached --color

1
Questo era esattamente quello che stavo cercando quando ho trovato questa domanda. Grazie!
William Rogers,

7

Veloce e semplice, supponendo che tu sia il maestro:

    git diff (checkout_id):file.txt file.txt

Esempio:

    git diff asdfioei91819280din198:file.txt file.txt

4

Innanzitutto, utilizzare " git log" per elencare i registri per il repository.

Ora, seleziona i due ID di commit, relativi ai due commit. Volete vedere le differenze ( esempio : il maggior numero di commit e alcuni di quelli più vecchi (secondo le vostre aspettative per la versione corrente e qualche versione precedente) ).

Quindi, utilizzare:

git diff <commit_id1> <commit_id2>

o

git difftool <commit_id1> <commit_id2>

3

Se il commit principale è indicato da HEAD, puoi fare qualcosa del genere:

commit1 -> HEAD
commit2 -> HEAD~1
commit3 -> HEAD~2

Diff tra il primo e il secondo commit:

git diff HEAD~1 HEAD

Differenza tra primo e terzo commit:

git diff HEAD~2 HEAD

Differenza tra secondo e terzo commit:

git diff HEAD~2 HEAD~1

E così via...


2

Uso Bitbucket con l' IDE Eclipse con il plugin Eclipse EGit installato.

Confronto un file da qualsiasi versione della sua storia (come SVN ).

Menu Esplora progetti → File → tasto destro → TeamMostra nella cronologia .

Questo porterà la cronologia di tutte le modifiche su quel file. Ora Ctrlfai clic e seleziona due versioni → "Confronta tra loro" .


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.