Ich spiele mit Git isoliert auf meinem eigenen Rechner, und ich finde es schwierig, ein mentales Modell aller meiner Zweige und Übertragungen zu erhalten. Ich weiß, dass ich ein git log
machen kann, um die Commit-Historie von dort aus zu sehen, wo ich mich befinde, aber gibt es eine Möglichkeit, die gesamte Branch-Topographie zu sehen, so etwas wie diese ascii-Maps, die überall zur Erklärung von Branches verwendet zu werden scheinen?
.-A---M---N---O---P
/ / / / /
I B C D E
\ / / / /
`-------------'
Es fühlt sich einfach so an, als ob jemand, der kommt und versucht, mein Repository zu übernehmen, Schwierigkeiten hätte, herauszufinden, was genau vor sich geht.
Ich schätze, ich bin beeinflusst von AccuRev's Stream-Browser...
git log --graph
oder gitk
. (Beide akzeptieren auch --all
, was alle Zweige anzeigt, anstatt nur den aktuellen.)
Bearbeiten:
Für Zweignamen und eine kompakte Ansicht, versuchen Sie es: git log --graph --decorate --oneline
Ich verwende normalerweise
git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"
Mit Farben (wenn Ihre Shell Bash ist):
git log --graph --full-history --all --color \
--pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"
Dies wird eine textbasierte Darstellung wie diese ausgeben:
* 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
(Sie könnten auch einfach git log --format=oneline
verwenden, aber das würde die Commit-Meldungen mit Zahlen verbinden, was IMHO weniger schön aussieht).
Um eine Abkürzung für diesen Befehl zu erstellen, sollten Sie Ihre Datei ~/.gitconfig
bearbeiten:
[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"
Wie Sodel the Vociferous jedoch in den Kommentaren anmerkt, ist ein solch langer Formatierungsbefehl schwer zu merken. Normalerweise ist es kein Problem, da man es in die Datei ~/.gitconfig
einfügen kann. Wenn Sie sich jedoch manchmal an einem entfernten Rechner anmelden müssen, an dem Sie die Konfigurationsdatei nicht ändern können, können Sie eine einfachere, aber schneller zu tippende Version verwenden:
git log --graph --oneline
Ich mag es, mit git log
, zu tun:
git log --graph --oneline --branches
(auch mit --all, um auch entfernte Zweige zu sehen)
Funktioniert mit aktuellen Git-Versionen: eingeführt seit 1.6.3 (Do, 7. Mai 2009)
- "
--pretty=<style>
"-Option für die Log-Befehlsfamilie kann jetzt als "--format=<style>
" geschrieben werden.
Darüber hinaus ist--format=%formatstring
eine Kurzform für--pretty=tformat:%formatstring
.
- "
--oneline
" ist ein Synonym für "--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
Sie können auch den Zeitraum der Protokollanzeige begrenzen (Anzahl der Commits):
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
(zeigt nur die letzten 5 Commits an)
Was mir an der aktuell gewählten Lösung nicht gefällt, ist:
git log --graph
Es werden viel zu viele Informationen angezeigt (wenn ich nur eine kurze Zusammenfassung sehen möchte):
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
ist großartig, zwingt mich aber dazu, die Shell-Sitzung zu verlassen und in ein anderes Fenster zu wechseln, während die schnelle Anzeige der letzten n Commits oft ausreicht.