Impossible d'afficher un arbre Git dans le terminal

440

L'ancien article de Killswitchcollective.com, 30 juin 2009 , contient les entrées et sorties suivantes

git co master
git merge [your_branch]
git push

upstream    A-B-C-D-E            A-B-C-D-E-F-G
                 \        ---->               \
your branch       C-D-E                        G

Je suis intéressé par la façon dont vous obtenez l'arborescence des commits dans votre terminal sans utiliser Gitk ou Gitx dans OS / X.

Comment obtenir une vue arborescente des validations dans le terminal?

Léo Léopold Hertz 준영
la source
2
Ce n'est pas important pour la question, mais l'article en question n'est plus disponible. Une copie en cache est disponible via les archives Internet: web.archive.org/web/20110831142839/http://…
Alan De Smet

Réponses:

796

Comment obtenir une vue arborescente des validations dans le terminal?

git log --graph --oneline --all

est un bon début.

Vous pouvez obtenir des lettres étranges. Ce sont des codes ASCII pour les couleurs et la structure. Pour résoudre ce problème, ajoutez ce qui suit à votre .bashrc:

export LESS="-R"

de telle sorte que vous n'avez pas besoin d'utiliser le filtre ASCII de Tig par

git log --graph --pretty=oneline --abbrev-commit | tig   // Masi needed this 

Le graphique basé sur le texte de l' article de Git-ready contient d'autres options:

git log --graph --pretty=oneline --abbrev-commit

graphique du journal git

En ce qui concerne l'article que vous mentionnez, j'irais avec la réponse de Pod : une sortie ad-hoc faite à la main.


Jakub Narębski mentionne dans les commentaires tig , une interface en mode texte basée sur ncurses pour git. Voir leurs sorties .
Il a ajouté une --graphoption en 2007.

VonC
la source
1
Je viens de le tester sur mon repo. Cela fonctionne mais je suis sous Windows avec MSysGit1.6.3.
VonC
files.getdropbox.com est bloqué ici au travail :( Je verrai votre photo dans environ une heure, le temps de rentrer.
VonC
@Vonc: J'en ai maintenant tapé deux pour la première commande. J'obtiens une vue similaire à celle de l'image pour la deuxième commande.
Léo Léopold Hertz 준영
9
Il existe également 'tig', une interface en mode texte pour git (utilisant ncurses), qui avait une vue historique graphique dans le terminal avant qu'il n'y ait l'option '--graph' pour git-log.
Jakub Narębski
2
Je trouve --decorateégalement indispensable sur ce type d'affichage - il vous montre les noms des références (branches, distantes et locales) à côté du nom de commit abrégé.
Matt Enright
312

Une solution consiste à créer un alias dans votre .gitconfiget à l'appeler facilement:

[alias]
    tree = log --graph --decorate --pretty=oneline --abbrev-commit

Et lorsque vous l'appellerez la prochaine fois, vous utiliserez:

git tree

Pour le mettre dans votre ~ / .gitconfig sans avoir à le modifier, vous pouvez faire:

git config --global alias.tree "log --graph --decorate --pretty=oneline --abbrev-commit"  

(Si vous n'utilisez pas le --global, il le mettra dans le .git / config de votre dépôt actuel.)

Marouane Gazanayi
la source
1
En quoi ce n'est pas un alias par défaut? Je suppose que cela rendrait la CLI de Git un peu moins exaspérante à utiliser et nous ne pouvons pas avoir ça ...
Timmmm
123
git log --oneline --decorate --all --graph

Un arbre visuel avec les noms des branches inclus.

Utilisez-le pour l'ajouter comme alias

git config --global alias.tree "log --oneline --decorate --all --graph"

Vous l'appelez avec

git tree

Git Tree

Sebastian Patten
la source
2
Très joli, celui-ci. Je l'utilise en combinaison avec less -Scomme décrit ici , pour empêcher les lignes enveloppées d'obscurcir l'arbre.
djvg
60

tig

Si vous voulez une arborescence interactive , vous pouvez l'utiliser tig. Il peut être installé par brewsur OSX et apt-getsous Linux.

brew install tig
tig

C'est ce que vous obtenez:

entrez la description de l'image ici

Mohsen
la source
Pouvez-vous obtenir un tel arbre que dans la réponse de VonC par Tig actuellement? Nous utilisons Tig dans la réponse de VonC uniquement comme filtre Ascii.
Léo Léopold Hertz 준영
4

Garder vos commandes courtes les rendra plus faciles à mémoriser:

git log --graph --oneline
JSON C11
la source
1

Je suggérerais à quiconque d'écrire la commande complète

git log --all --decorate --oneline --graph

plutôt que de créer un alias.

Il est bon d'avoir les commandes dans votre tête, donc vous le savez par cœur, c'est-à-dire que vous ne dépendez pas des alias lorsque vous changez de machine.

Saxophoniste
la source
2
C'est en fait git log --all --decorate --oneline --graph, après le mnémonique git log a dog;)
VonC
@VonC Le résultat final est le même. Quoi qu'il en soit, je suis d'accord avec vous. Merci pour les commentaires.
Saxophoniste
Oui, c'est ce que le smiley ;)à la fin de mon commentaire précédent essayait (imparfaitement) de transmettre: vous pouvez utiliser ces options dans l'ordre que vous voulez. Je trouve juste "log a dog" funny :)
VonC
1
Ou vous pourriez scp ~/.bashrc root@remote:~/et vos alias se déplacer très rapidement.
Adminy