Sto giocando con git in isolamento sulla mia macchina, e trovo difficile mantenere un modello mentale di tutti i miei rami e commit. So che posso fare un git log
per vedere la storia dei commit da dove mi trovo, ma c'è un modo per vedere l'intera topografia dei rami, qualcosa come queste mappe ascii che sembrano essere usate ovunque per spiegare i rami?
.-A---M---N---O---P
/ / / / /
I B C D E
\ / / / /
`-------------'
Mi sembra che qualcuno che arriva e cerca di prendere il mio repository avrebbe difficoltà a capire esattamente cosa sta succedendo.
Credo di essere influenzato da AccuRev's stream browser...
git log --graph
o gitk
. (Entrambi accettano anche --all
, che mostrerà tutti i rami invece di quello corrente).
Modifica:
Per i nomi dei rami e una vista compatta, prova: git log --graph --decorate --oneline
Di solito uso
git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"
Con i colori (se la tua shell è Bash):
git log --graph --full-history --all --color \
--pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"
Questo stamperà una rappresentazione testuale come questa:
* 040cc7c (HEAD, master) Mannual is NOT built by default
* a29ceb7 Removed offensive binary file that was compiled on my machine and was hence incompatible with other machines.
| * 901c7dd (cvc3) cvc3 now configured before building
| * d9e8b5e More sane Yices SMT solver caller
| | * 5b98a10 (nullvars) All uninitialized variables get zero inits
| |/
| * 1cad874 CFLAGS for cvc3 to work succesfully
| * 1579581 Merge branch 'llvm-inv' into cvc3
| |\
| | * a9a246b nostaticalias option
| | * 73b91cc Comment about aliases.
| | * 001b20a Prints number of iteration and node.
| |/
|/|
| * 39d2638 Included header files to cvc3 sources
| * 266023b Added cvc3 to blast infrastructure.
| * ac9eb10 Initial sources of cvc3-1.5
|/
* d642f88 Option -aliasstat, by default stats are suppressed
(Potresti semplicemente usare git log --format=oneline
, ma legherà i messaggi di commit ai numeri, il che sembra meno carino IMHO).
Per creare una scorciatoia per questo comando, potresti voler modificare il tuo file ~/.gitconfig
:
[alias]
gr = log --graph --full-history --all --color --pretty=tformat:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s%x20%x1b[33m(%an)%x1b[0m"
Tuttavia, come nota Sodel the Vociferous nei commenti, un comando di formattazione così lungo è difficile da memorizzare. Di solito, non è un problema perché si può mettere nel file ~/.gitconfig
. Tuttavia, se a volte devi accedere a una macchina remota dove non puoi modificare il file di configurazione, potresti usare una versione più semplice ma più veloce da digitare:
git log --graph --oneline
Mi piace, con git log
, fare:
git log --graph --oneline --branches
(anche con --all, per visualizzare anche rami remoti)
Funziona con le recenti versioni di Git: introdotto da 1.6.3 (Gio, 7 maggio 2009)
"- "--pretty=<style>
" opzione della famiglia di comandi log può ora essere scritta come "--format=<style>
".
Inoltre, --format=%formatstring
è un'abbreviazione di --pretty=tformat:%formatstring
.
--oneline
" è un sinonimo di "--pretty=oneline --abbrev-commit
".PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
| | * 8183707 a first bug10 fix
| |/
| * e727105 a second evol for 2.0
| * 473d44e a main evol
|/
* b68c1f5 first evol, for making 1.0
Puoi anche limitare l'arco della visualizzazione del log (numero di commit):
PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all -5
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
(mostra solo gli ultimi 5 commit)
Quello che non mi piace dell'attuale soluzione selezionata è:
git log --graph
Mostra troppe informazioni (quando voglio solo guardare un rapido riassunto):
PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC <[email protected]>
| Date: Sat Nov 14 13:42:20 2009 +0100
|
| a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <[email protected]>
| Date: Sat Nov 14 13:41:50 2009 +0100
|
| a first bug10 fix
|
gitk
è ottimo, ma mi costringe a lasciare la sessione di shell per un'altra finestra, mentre visualizzare rapidamente gli ultimi n commit è spesso sufficiente.