Come visualizzare il file diff in git prima del commit


444

Questo mi capita spesso:

Sto lavorando su un paio di modifiche correlate contemporaneamente nel corso di uno o due giorni, e quando è il momento di impegnarmi, finisco per dimenticare cosa è cambiato in un file specifico. (Questo è solo un repository git personale, quindi sono d'accordo con più di un aggiornamento in un commit.)

Esiste un modo per visualizzare in anteprima le modifiche tra il mio file locale, che sta per essere archiviato e l'ultimo commit per quel file?

Qualcosa di simile a:

git diff --changed /myfile.txt

E stamperebbe qualcosa del tipo:

line 23
  (last commit): var = 2+2
  (current):     var = myfunction() + 2

line 149
  (last commit): return var
  (current):     return var / 7

In questo modo, ho potuto vedere rapidamente cosa avevo fatto in quel file dall'ultima volta che è stato archiviato.

Risposte:


732

Se vuoi vedere cosa non hai git addancora modificato:

git diff myfile.txt

o se vuoi vedere le modifiche già aggiunte

git diff --cached myfile.txt

20
dai un'occhiata git add -p. Rivedi ogni modifica, approva in modo selettivo le modifiche allo stage, interrompi in qualsiasi momento se cambi idea e persino modifica in linea di un blocco. Non ne ho mai git addsenza.
Kyle Baker,

2
come puoi uscire dal file?
Calcia Buttowski il

3
@Kick Prova a premereq
wjandrea

inoltre, se si desidera rimuovere i stupidi prefissi 'a /' e 'b /' nel risultato diff, è possibile impostare git config --global diff.noprefix true.
Liang,

64
git diff HEAD file

ti mostrerà le modifiche che hai aggiunto al tuo gruppo di lavoro dall'ultimo commit. Verranno visualizzate tutte le modifiche (messe in scena o non in scena).


1
La tua soluzione funziona. Ma sono un po 'confuso. HEAD indica l'ultimo numero di commit. Quindi, quando aggiungiamo, l'indice della directory di lavoro viene aggiornato e non HEAD. Quindi, come mostra la differenza.
Mav55,

17

Per verificare le differenze locali:

git diff myfile.txt

oppure puoi utilizzare uno strumento diff (nel caso in cui desideri ripristinare alcune modifiche):

git difftool myfile.txt

Per un utilizzo git difftoolpiù efficiente, installa e utilizza il tuo strumento GUI preferito come Meld, DiffMerge o OpenDiff.

Nota: è anche possibile utilizzare .(anziché il nome file) per visualizzare le modifiche dir correnti.

Per verificare le modifiche per ogni riga, utilizzare: git blameche visualizzerà quale riga è stata impegnata in quale commit.


Per visualizzare il file effettivo prima del commit (dov'è il mastertuo ramo), esegui:

git show master:path/my_file

15

Hai provato -v(o --verbose) l'opzione per git commit? Aggiunge il diff del commit nell'editor dei messaggi.


Buona risposta. Questo può fornire informazioni nell'editor di commit, mi fa commettere più facilmente. Esiste un modo per chiudere l'area delle informazioni Changes not staged for commit:che può rendere l'editor di commit più pulito.
Radian Jheng,

15

Un'altra tecnica da considerare se si desidera confrontare un file con l'ultimo commit che è più pedante:

git diff master myfile.txt

Il vantaggio di questa tecnica è che puoi anche confrontare il penultimo commit con:

git diff master^ myfile.txt

e quello precedente:

git diff master^^ myfile.txt

Inoltre, puoi sostituire "~" con il carattere "^" e "nome ramo" con "master" se non ti trovi nel ramo master.


14

Penso che questo sia il caso d'uso perfetto che garantisca una GUI. - Anche se capisco perfettamente che può anche essere raggiunto abbastanza bene dalla riga di comando.

Personalmente, ogni mio impegno, lo faccio dal git-gui. In cui posso effettuare più commit atomici con hunk / linee separati se ha senso farlo.

Gut Gui consente la visualizzazione delle differenze in un'interfaccia colorata ben formattata, è piuttosto leggera. Sembra che questo sia qualcosa che dovresti controllare anche tu.


Sono d'accordo - ti permette anche di modificare il messaggio di commit mentre guardi il diff.
François

Buono a sapersi, ma mi piacerebbe attenermi alla CLI. Ho usato un paio di pacchetti che lo avevano, ma sono passato a terminal / vim rigorosamente per il mio flusso di lavoro. Grazie comunque.
Sauce McBoss

Sì, se ti attieni alla GUI ci sono molte funzioni interessanti come quelle git bisectche non sono davvero accessibili.
NoBugs

2
Sono d'accordo - Ci sono molte opzioni per le quali è molto più veloce e ha più senso usare la riga di comando. Tuttavia, l'anteprima delle modifiche non è una di queste.
VitalyB,

Esistono anche interfacce utente di testo, che vengono eseguite nel terminale. Uno degno di nota è tig"interfaccia in modalità testo per Git".
smido,

11

Su macOS, vai alla directory principale di git e inserisci git diff *


4

Il modo migliore che ho trovato, a parte l'uso di una GUI di commit dedicata, è usare git difftool -d- Questo apre il tuo strumento diff in modalità confronto directory, confrontando HEAD con la cartella sporca corrente.


esattamente quello di cui avevo bisogno. Grazie
Ivan Ferrer Villa,

3
git difftool -d HEAD filename.txt

Questo mostra un confronto usando la finestra a fessura VI nel terminale.

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.