2012-04-06 18 views
237

Questo accade spesso a me:Come visualizzare diff file in git prima di commettere

sto lavorando su un relativo paio di modifiche al tempo stesso nel corso di un giorno o due, e quando è il momento di impegnarsi , Finisco per dimenticare ciò che è cambiato in un file specifico. (Questo è solo un repository git personale, quindi sto bene con più di un aggiornamento in un commit.)

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

Qualcosa di simile:

git diff --changed /myfile.txt 

E sarebbe stampare qualcosa come:

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 subito quello che avevo fatto in quel file dopo l'ultimo check-in.

risposta

418

Se volete vedere quello che hai ma non git add ndr:

git diff myfile.txt 

o se si desidera vedere already- add ndr cambia

git diff --cached myfile.txt 
+7

Si noti che il doppio trattino è richiesto solo da una possibile confusione tra una revisione e un nome file (e in tal caso, git ve lo dirà). –

+0

Grazie! git diff myfile.txt lo è stato. Grazie anche per la punta del doppio cruscotto. –

+3

controlla 'git add -p'. Verifica ogni cambiamento, approva in modo selettivo le modifiche allo stage, annulla in qualsiasi momento se cambi idea e persino modifica inline di un blocco. Non ho mai aggiunto "git" senza di esso. –

11

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

+1

Dal git 1.7.2 – OlivierBlanvillain

+0

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

12

Penso che questo sia il caso di utilizzo perfetto che garantisce una GUI. - Anche se capisco perfettamente che può anche essere raggiunto abbastanza bene all'interno della linea di comando.

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

Gut Gui consente di visualizzare le differenze in un'interfaccia colorata ben formattata, è piuttosto leggero. Sembra che questo sia qualcosa che dovresti fare anche tu.

+0

Accetto - consente anche di modificare il messaggio di commit mentre si guarda il diff. –

+0

Buono a sapersi, ma mi piacerebbe attenermi alla CLI. Ho usato un paio di pacchetti che ce l'hanno, ma mi sono spostato su terminal/vim per il mio flusso di lavoro. Grazie comunque. –

+0

Sì, se ti attieni alla GUI ci sono un sacco di funzioni interessanti come 'git bisect' che non sono veramente accessibili. – NoBugs

44
git diff HEAD file 

mostrerà le modifiche aggiunte al worktree dall'ultimo commit. Verranno mostrati tutti i cambiamenti (in scena o non in scena).

+1

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

10

Per verificare la presenza di differenze locali:

git diff myfile.txt 

oppure è possibile utilizzare uno strumento diff (nel caso in cui si desidera ripristinare alcune modifiche):

git difftool myfile.txt 

Per utilizzare in modo più efficiente git difftool , installa e usa il tuo strumento GUI preferito come Meld, DiffMerge o OpenDiff.

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

Per verificare le modifiche per ciascuna riga, utilizzare: git blame che visualizza quale riga è stata impegnata in quale commit.


Per visualizzare il file vero e proprio prima che il commit (dove master è la vostra filiale), eseguire:

git show master:path/my_file 
1

Il modo migliore che ho trovato, da parte di usare una GUI dedicata impegnarsi, è quello di utilizzare git difftool -d - Questo apre lo strumento di confronto nella modalità di confronto delle directory, confrontando HEAD con la cartella dirty corrente.

8

Un'altra tecnica da prendere in considerazione se si desidera confrontare un file per l'ultimo impegno che è più pedanti:

git diff master myfile.txt 

Il vantaggio di questa tecnica è che si può anche confrontare la penultima impegnarsi con:

git diff master^ myfile.txt 

e quello prima ancora:

git diff master^^ myfile.txt 

Inoltre è possibile sosti tute '~' per il carattere '^' del caret e 'il nome del ramo' per 'maestro' se non si è sul ramo principale.

3

su MacOS, andare alla directory principale GIT e immettere git diff *

+0

questo non funziona su win10 – lucaste

0
git difftool -d HEAD filename.txt 

Questo mostra un confronto mediante VI finestra nel terminale fessura.