Come vedere le modifiche in un commit Git?


Risposte:


1975

Per vedere il diff per un particolare COMMIThash:

git diff COMMIT~ COMMITti mostrerà la differenza tra quell'antenato COMMITe il COMMIT. Vedi le pagine man per git diff per i dettagli sul comando e gitrevisions sulla ~notazione e sui suoi amici.

In alternativa, git show COMMITfarà qualcosa di molto simile. (I dati del commit, incluso il suo diff - ma non per i merge commit.) Vedi la manpage git show .


17
Si noti che è ^necessario citare le conchiglie Thomson e Bourne (sinonimo di |lì) e i rcsuoi derivati ​​(operatore di controllo) e in zshcon abilitato al notglobo esteso ( operatore di globbing)
Stephane Chazelas,

3
Si noti che HEAD^implica il primo genitore nel caso in cui un commit abbia più genitori (vale a dire unire il commit).
Mansour,

23
git diff COMMIT~ COMMITfunziona per me, nota la tilde invece del cursore. Sto eseguendo git versione 2.6.1.windows.1 su Windows 10.
Juuso Ohtonen,

14
@tradetree: la parola COMMIT dovrebbe essere sostituita con il nome di alcuni commit, ad esempio la somma SHA.
Nick Matteo,

91
Sento che Git Show è più appropriato per questa domanda e dovrebbe essere il suggerimento menzionato per primo.
pypmannetjies,

497

Come accennato in " Abbreviazione di diff di git commit con il suo genitore? ", Puoi anche usare git diffcon:

git diff COMMIT^!

o

git diff-tree -p COMMIT

Con git show, dovresti (per concentrarti solo sul diff) per fare:

git show --color --pretty=format:%b $COMMIT

Il COMMITparametro è un commit-ish :

Un oggetto commit o un oggetto che può essere ricondizionato in modo ricorsivo a un oggetto commit. Di seguito sono riportati tutti i commit-ishes: un oggetto commit, un oggetto tag che punta a un oggetto commit, un oggetto tag che punta a un oggetto tag che punta a un oggetto commit, ecc.

Vedere gitrevision "SPECIFICARE LE REVISIONI" per fare riferimento a un commit-ish.
Vedi anche " Che cosa significa albero-ish in Git? ".


371

Puoi anche provare questo modo semplice:

git show <COMMIT>

2
Sembra che questo faccia qualcosa di completamente diverso
Miserable Variable

3
Mostra solo il messaggio di commit. Non la differenza tra le modifiche al codice applicate per questo commit.
k0pernikus,

1
Si lo fa? Finalmente nelle recenti versioni di git ...
Davy il

2
Questa dovrebbe essere la risposta corretta aggiornata
Scott Skiles,

1
Questa dovrebbe essere la risposta.
Roel

77

git show mostra le modifiche apportate al commit più recente.

Equivalente a git show HEAD.

git show HEAD~1 ti riporta indietro di 1 commit.


45

Di solito faccio:

git diff HEAD~1

Per mostrare le modifiche relative all'ultimo commit. Se hai più commit, aumenta solo il numero 1 a quante differenze di commit vuoi vedere.


34

Per prima cosa ottieni l'ID commit usando,

git log #to list all

O

git log -p -1 #last one commit id

Copia ID commit.

Ora utilizziamo due metodi per elencare le modifiche da un commit specifico,

Metodo 1:

git diff commit_id^! #commit id something like this 1c6a6000asad012

Metodo 2:

git show commit_id
For example: git show 1c6a600a

2
Cosa ^!significa ??
Martín Coll,

2
^! è la scorciatoia per commit ^ .. commit, il che significa che escluderà tutti i genitori e controllerà la differenza in quel commit
Mohideen bin Mohammed,

Non sono un esperto ma ho un caso (con più rami coinvolti) in cui git log c ^! non è esattamente lo stesso di git log c ^ .. c. In effetti è molto meglio: git log c ^ .. c ha elencato troppe voci mentre git log c ^! fatto la cosa giusta, quindi questo è quello che stavo cercando da molto tempo
user829755

32
git show <commit_sha>

Questo ti mostrerà solo cosa c'è in quel commit. Penso che puoi fare un intervallo semplicemente inserendo uno spazio tra due shas di commit.

git show <beginning_sha> <ending_sha>

il che è molto utile se stai eseguendo la rebasing spesso perché i log delle funzionalità saranno tutti in fila.


25

Dalla pagina man di git-diff (1) :

git diff [options] [<commit>] [--] [<path>…]
git diff [options] --cached [<commit>] [--] [<path>…]
git diff [options] <commit> <commit> [--] [<path>…]
git diff [options] <blob> <blob>
git diff [options] [--no-index] [--] <path> <path>

Usa il terzo al centro:

git diff [options] <parent-commit> <commit>

Sempre dalla stessa pagina man, in fondo, nella sezione Esempi :

$ git diff HEAD^ HEAD      <3>

Confronta la versione prima dell'ultimo commit e dell'ultimo commit.

Certo, è un po 'confuso, sarebbe meno confuso

Confronta il commit più recente con il commit precedente.


3
La tua riformulazione si applicherebbe a git diff HEAD HEAD^.
Richard,

git diff HEAD ^ HEAD non mostra alcun cambiamento.
user3690202

@ user3690202, ciò implica che non ci sono modifiche da visualizzare. È proprio così?

Come possono non esserci cambiamenti da visualizzare? Se si desidera visualizzare l'ultimo commit, sicuramente a meno che non sia un repository completamente nuovo, ci saranno alcune modifiche da visualizzare?
user3690202

@ user3690202 è possibile effettuare un "commit vuoto" con Git che in realtà non contiene alcuna modifica da parte del genitore, sebbene sia presente una protezione integrata che lo controlla e lo impedisce, sebbene sia sostituibile con un'opzione della riga di comando. Dubito che tu abbia intenzionalmente creato un commit vuoto, quindi un'altra possibilità è che in qualche modo tu abbia una conversione di fine linea pre-commit su (o altre cose divertenti degli spazi bianchi) che induce Git a pensare che non sono state effettivamente apportate modifiche. Su quale piattaforma stai eseguendo Git?


16

Un'altra possibilità:

git log -p COMMIT -1

1
@GrantMcLean Sì, ed è già nella risposta con il voto più alto, quindi non lo menziono.
John_West,

11

Puoi usare git diff HEAD HEAD^1 per vedere il diff con il commit parent.

Se vuoi solo vedere l'elenco dei file, aggiungi l' --statopzione.


Questo è ciò che intendi, git diff HEAD ^ 1 HEAD
Shibir Basak,

Nota che questo mostrerà ciò che hai aggiunto come rimosso, in quanto farà un confronto inverso. Il modo in cui dovresti leggere il diffcomando è: cosa dovrei cambiare nel file per ottenere da commit HEADa commit HEAD^1?
brainplot

9
git difftool COMMIT^ <commit hash>

è anche possibile se hai configurato il tuo difftool.

Vedi qui come configurare difftool O la pagina del manuale qui

Inoltre è possibile utilizzare git diff-tree --no-commit-id --name-only -r <commit hash>per vedere quali file sono stati modificati / impegnati in un hash di commit commit


9

Mi piace il comando seguente per confrontare un commit specifico e il suo ultimo commit:

git diff <commit-hash>^-

Esempio:

git diff cd1b3f485^-

6

Per vedere autore e ora in base al commit, utilizzare git show COMMIT. Il che si tradurrà in qualcosa del genere:

commit 13414df70354678b1b9304ebe4b6d204810f867e
Merge: a2a2894 3a1ba8f
Author: You <you@you.com>
Date:   Fri Jul 24 17:46:42 2015 -0700

     Merge remote-tracking branch 'origin/your-feature'

Se vuoi vedere quali file sono stati modificati, esegui quanto segue con i valori dalla riga Unisci sopra git diff --stat a2a2894 3a1ba8f .

Se vuoi vedere l'attuale diff, esegui git --stat a2a2894 3a1ba8f


"Se vuoi vedere l'attuale diff, esegui git --stat a2a2894 3a1ba8f". Penso che tu intenda git diff a2a2894 3a1ba8faltrimenti unknown option: --stat.
Frutta

5

Per verificare le modifiche complete:

  git diff <commit_Id_1> <commit_Id_2>

Per controllare solo i file modificati / aggiunti / eliminati:

  git diff <commit_Id_1> <commit_Id_2> --name-only

NOTA : per controllare diff senza commit tra, non è necessario inserire gli ID di commit.


4

Sto eseguendo Git versione 2.6.1.windows.1 su Windows 10, quindi avevo bisogno di una leggera modifica alla risposta di Nevik (tilde anziché caret):

git diff COMMIT~ COMMIT

Un'altra opzione è quella di citare il cursore:

git diff "COMMIT^" COMMIT

3

Questo comando ti porterà il commit-hash del genitore Git:

git log -n 2 <commit-hash>

Dopo di che git diff-tool <commit-hash> <parent-commit-hash>

Esempio:

bonnie@bonnie ~/ $ git log -n 2 7f65b9a9d3820525766fcba285b3c678e889fe3

commit 7f65b9a9d3820525766fcba285b3c678e889fe3b
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 13:17:07 2016 +0530

CSS changed to maintain the aspect ratio of the channel logos and to fit them properly.

commit c3a61f17e14e2b80cf64b172a45f1b4826ee291f
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 11:28:09 2016 +0530

The ratio of the height to width of the channel images are maintained.

Dopodichè

git difftool 7f65b9a9d3820525766fcba285b3c678e889fe3b c3a61f17e14e2b80cf64b172a45f1b4826ee291f

2

Se vuoi solo vedere le modifiche nell'ultimo commit, git showti darò semplicemente quello.


1

In caso di controllo della modifica della sorgente in una vista grafica,

$gitk (Mention your commit id here)

per esempio:

$gitk HEAD~1 

Non capisco perché questa risposta sia stata sottoposta a downgrade. Sono d'accordo che la riga di comando e le cose basate sul testo sono la strada da percorrere ma gitk fornisce molte informazioni utili.
ShellFish,
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.