Vedi le modifiche a un file specifico usando git


472

So che posso usare il git diffcomando per controllare le modifiche, ma, per quanto ho capito, è basato su directory. Ciò significa che fornisce tutte le modifiche di tutti i file nella directory corrente.

Come posso controllare solo le modifiche in un file specifico? File Dire, ho cambiato file_1.rb, file_2.rb, ..., file_N.rb, ma io sono interessato solo nelle modifiche nel file file_2.rb. Come posso verificare queste modifiche (prima di eseguire il commit)?



4
La mia domanda principale è come verificare la differenza per un file specifico prima di eseguire il commit di tutte le modifiche. Git log è per le modifiche impegnate credo.
Mellon,

1
Nella mia esperienza è meglio usare uno strumento visivo come GitKraken
Giovanni Benussi,

Risposte:


642

Usa un comando come:

git diff file_2.rb

Consultare la git diffdocumentazione per informazioni complete sui tipi di cose per le quali è possibile ottenere differenze.

Normalmente, git diffda solo mostra tutte le modifiche nell'intero repository (non solo la directory corrente).


100
Se vuoi vedere le modifiche di un file che hai già "git add" ed, è "git diff --cached"
Ana Betts

8
Se si desidera verificare un file con un commit precedente: $ git diff [commit hash] file_2.rb
Alex Angelico,

2
Come uscire dalla vista diff?
Garry,

1
Oppure usa SourceTree.
GeneCode

4
@GurpreetsinghDhanju Prova a premere Q

110

Un altro metodo (menzionato in questa risposta SO ) manterrà la cronologia nel terminale e ti darà una traccia molto profonda del file stesso:

git log --follow -p -- file

Questo mostrerà l'intera cronologia del file (inclusa la cronologia oltre i nomi e con le differenze per ogni modifica).

In altre parole, se il file chiamato bar una volta era chiamato foo, allora git log -p bar (senza l'opzione --follow) mostrerà solo la cronologia del file fino al punto in cui è stato rinominato - non mostrerà il storia del file quando era noto come foo. Usando git log --follow -p bar mostrerà l'intera cronologia del file, incluse eventuali modifiche al file quando era noto come pippo.


3
Funziona bene con --stat per avere una panoramica delle righe aggiunte / cancellate.
Tom Hale,

2
Sì, questa risposta dovrebbe essere almeno superiore, tenere traccia della cronologia, non solo del diff corrente, né è necessario tenere traccia di tutti gli hash di commit. Utilizzo piuttosto semplice ma molto potente nei cambiamenti
Ilhicas,

87

È possibile utilizzare gitk [filename]per visualizzare il registro delle modifiche


2
Ciò mostrerebbe la cronologia degli commit sul file, che a volte potrebbe essere ciò di cui hai bisogno.
r1k0,

26

Puoi usare il comando seguente per vedere chi ha cambiato cosa in un file.

git blame <filename>


4
Questa è la risposta migliore in quanto ti dice chi ha fatto quale cambiamento e quando e come commettere il cambiamento faceva parte. Per filtrare una modifica specifica, fai solo git blame <filename> | grep <searchfor>dove <searchfor>è un valore breve. Ad esempio, per scoprire che ha cambiato fooper barin dist/index.php, si può usaregit blame dist/index.php | grep bar
Kraang Prime

15

Puoi eseguire

git status -s

Questo mostrerà il nome del file modificato e quindi copiando il percorso del file interessato è possibile vedere le modifiche usando git diff

git diff <filepath + filename>

8

per elencare solo i dettagli di commit per specifiche modifiche ai file,

git log --follow file_1.rb

per elencare la differenza tra vari commit per lo stesso file,

git log -p file_1.rb

per elencare solo il commit e il suo messaggio,

git log --follow --oneline file_1.rb

5

puoi anche provare

git show <filename>

Per i commit, git show mostrerà il messaggio di registro e il diff testuale (tra il tuo file e la versione di del file).

Puoi controllare la documentazione di git show per maggiori informazioni.



0

Totalmente d'accordo con @Greg Hewgill

E se il tuo percorso include spazi, potresti usarlo, prova ad aggiungere con l'apostrofo ' o `

git diff 'MyProject / My Folder / My Sub Folder / file_2.rb'

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.