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?


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.


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.)


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


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


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

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.