Je joue avec git en isolation sur ma propre machine, et je trouve difficile de maintenir un modèle mental de toutes mes branches et commits. Je sais que je peux faire un git log
pour voir l'historique des commits d'où je suis, mais existe-t-il un moyen de voir la topographie complète de la branche, quelque chose comme ces cartes ascii qui semblent être utilisées partout pour expliquer les branches ?
.-A---M---N---O---P
/ / / / /
I B C D E
\ / / / /
`-------------'
J'ai l'impression que quelqu'un qui arriverait et essaierait de récupérer mon dépôt aurait des difficultés à comprendre exactement ce qui se passe.
Je suppose que je suis influencé par le [navigateur de flux][1] d'AccuRev...
git log --graph
ou gitk
. (Les deux acceptent aussi --all
, qui montrera toutes les branches au lieu de seulement la branche courante).
Edit:
Pour les noms des branches et une vue compacte, essayez : git log --graph --decorate --oneline
J'utilise habituellement
git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"
Avec les couleurs (si votre shell est Bash) :
git log --graph --full-history --all --color \
--pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"
Ceci imprimera une représentation textuelle comme ceci :
* 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
(Vous pourriez simplement utiliser git log --format=oneline
, mais cela liera les messages de commit à des nombres, ce qui est moins joli IMHO).
Pour faire un raccourci pour cette commande, vous pouvez éditer votre fichier ~/.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"
Cependant, comme le note Sodel the Vociferous dans les commentaires, une commande de formatage aussi longue est difficile à mémoriser. En général, ce n'est pas un problème car vous pouvez la mettre dans le fichier ~/.gitconfig
. Cependant, si vous devez parfois vous connecter à une machine distante où vous ne pouvez pas modifier le fichier de configuration, vous pouvez utiliser une version plus simple mais plus rapide à taper :
git log --graph --oneline
J'aime, avec [git log
][1], faire :
git log --graph --oneline --branches
(également avec --all, pour visualiser les branches distantes)
Fonctionne avec les versions récentes de Git : introduit [depuis 1.6.3][2] (Jeu, 7 Mai 2009)
- L'option "
--pretty=<style>
" de la famille de commandes log peut maintenant être orthographiée comme "--format=<style>
".
De plus,--format=%formatstring
est une abréviation de--pretty=tformat:%formatstring
.
- "
--oneline
" est un synonyme de "--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
Vous pouvez également limiter la durée d'affichage du journal (nombre de 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
(affiche seulement les 5 derniers commits)
Ce que je n'aime pas dans la solution choisie actuellement est :
git log --graph
Elle affiche beaucoup trop d'informations (alors que je veux seulement regarder un résumé rapide) :
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
est génial, mais m'oblige à quitter la session shell pour une autre fenêtre, alors qu'afficher les n derniers commits rapidement est souvent suffisant.
[1] : http://git-scm.com/docs/git-log [2] : http://www.kernel.org/pub/software/scm/git/docs/RelNotes-1.6.3.txt