Domanda Visualizza la cronologia delle modifiche di un file utilizzando la versione di Git


Come posso visualizzare la cronologia delle modifiche di un singolo file in Git, completare i dettagli con cosa è cambiato?

Ho ottenuto fino a:

git log -- [filename]

che mi mostra la cronologia di commit del file, ma come ottengo il contenuto di ciascuna modifica del file?

Sto provando a fare la transizione da MS SourceSafe e quello era un semplice right-click → show history.


2501
2017-11-10 15:42


origine


risposte:


Per questo vorrei usare:

gitk [filename]

o per seguire i nomi dei nomi precedenti

gitk --follow [filename]

1947
2017-08-24 12:05



Puoi usare

git log -p filename

lasciare che git generi le patch per ogni voce di log.

Vedere

git help log

per più opzioni - può effettivamente fare un sacco di cose belle :) Per ottenere solo il diff per un impegno specifico puoi

git show HEAD 

o qualsiasi altra revisione per identificatore. O usare

gitk

per visualizzare visivamente le modifiche.


1831
2017-11-10 15:56



git log --follow -p -- file

Questo mostrerà il intero cronologia del file (inclusa la cronologia oltre la rinomina e con le differenze per ogni modifica).

In altre parole, se il nome del file bar era una volta chiamato foo, poi git log -p bar (senza il --follow opzione) mostrerà solo la cronologia del file fino al punto in cui è stata rinominata - non mostrerà la cronologia del file quando era noto come foo. utilizzando git log --follow -p bar mostrerà l'intera cronologia del file, incluse eventuali modifiche al file quando era noto foo. Il -p l'opzione assicura che le differenze siano incluse per ogni cambiamento.


1183
2018-03-30 23:25



Se preferisci rimanere basato sul testo, potresti volerlo usare tig.

Installazione rapida:

  • apt-get: # apt-get install tig 
  • Homebrew (OS X): $ brew install tig

Usalo per visualizzare la cronologia su un singolo file: tig [filename]
Oppure consulta la cronologia dettagliata dei pronti contro termine: tig

Simile a gitk ma basato sul testo. Supporta i colori nel terminale!


146
2018-06-07 10:23



git whatchanged -p filename è anche equivalente a git log -p filename in questo caso.

Puoi anche vedere quando una linea di codice specifica all'interno di un file è stata cambiata con git blame filename. Questo stamperà un breve ID di commit, l'autore, il timestamp e la linea completa di codice per ogni riga nel file. Questo è molto utile dopo aver trovato un bug e vuoi sapere quando è stato introdotto (o chi è stato colpa sua).


101
2017-11-11 06:12



Utenti SourceTree

Se usi SourceTree per visualizzare il tuo repository (è gratuito e abbastanza buono) puoi fare clic con il tasto destro su un file e selezionare Registro selezionato

enter image description here

Il display (sotto) è molto più amichevole di gitk e la maggior parte delle altre opzioni elencate. Sfortunatamente (al momento) non esiste un modo semplice per avviare questa vista dalla riga di comando: la CLI di SourceTree attualmente apre solo repository.

enter image description here


91
2017-07-30 18:55



Per mostrare quale revisione e autore hanno modificato per ultimo ogni riga di un file:

git blame filename

o se si desidera utilizzare la potente interfaccia grafica con la colpa:

git gui blame filename

56
2017-08-11 13:01



Riepilogo delle altre risposte dopo aver letto e giocato un po ':

Il solito comando da linea di comando sarebbe

git log --follow --all -p dir/file.c

Ma puoi anche usare gitk (gui) o tig (text-ui) per dare molti più modi leggibili dall'uomo di guardarlo.

gitk --follow --all -p dir/file.c

tig --follow --all -p dir/file.c

Sotto debian / ubuntu, il comando install per questi strumenti adorabili è come previsto:

sudo apt-get install gitk tig

E sto attualmente usando:

alias gdf='gitk --follow --all -p'

in modo che io possa semplicemente digitare gdf dir per ottenere una storia focalizzata di tutto nella sottodirectory dir.


39
2017-12-05 18:38



Aggiungi questo alias al tuo .gitconfig:

[alias]
    lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative

E usa il comando in questo modo:

> git lg
> git lg -- filename

L'output apparirà quasi esattamente uguale all'uscita gitk. Godere.


22
2018-06-26 20:12



scrissi git-riproduzione per questo scopo esatto

pip install git-playback
git playback [filename]

Questo ha il vantaggio di visualizzare entrambi i risultati nella riga di comando (come git log -p) mentre ti permetto anche di passare attraverso ogni commit usando i tasti freccia (come gitk).


13
2017-11-19 06:25