Je joue avec Git de manière isolée sur ma propre machine, et j'ai du mal à maintenir un modèle mental de toutes mes branches et de mes commits. Je sais que je peux faire un git log
pour voir l'historique des validations d'où je suis, mais existe-t-il un moyen de voir toute la topographie des branches, 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 juste l'impression que quelqu'un qui vient et qui essaie de récupérer mon référentiel aurait du mal à comprendre exactement ce qui se passait.
Je suppose que je suis influencé par le navigateur de flux d'AccuRev ...
Réponses:
Utilisez
git log --graph
ougitk
. (Les deux acceptent également--all
, qui afficheront toutes les branches au lieu de la seule actuelle.)Pour les noms de branche et une vue compacte, essayez:
la source
--all
option et étiquette également les commits. Je n'ai jamais vu non plus dans la liste déroulante que vous pouvez sélectionner toutes les branches.git log --graph --decorate --oneline
- affiche un commit par ligne et décore avec des noms de branche.--all
option. Assez pratique!--simplify-by-decoration
option.J'utilise habituellement
Avec des couleurs (si votre coque est Bash):
Cela imprimera une représentation textuelle comme ceci:
(Vous pouvez simplement utiliser
git log --format=oneline
, mais il liera les messages de validation aux nombres, ce qui semble moins joli à mon humble avis).Pour créer un raccourci pour cette commande, vous souhaiterez peut-être modifier votre
~/.gitconfig
fichier:Cependant, comme Sodel les notes vocifères dans les commentaires, cette longue commande de formatage est difficile à mémoriser. Habituellement, ce n'est pas un problème car vous pouvez le mettre dans le
~/.gitconfig
fichier. 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 pour taper:la source
--full-history
n'est pertinent que lorsque vous utilisez--simplify-by-decoration
ou spécifiez un chemin de fichier.J'ai 3 alias (et 4 alias-alias pour une utilisation rapide) que je jette normalement dans mon
~/.gitconfig
fichier:git lg
/git lg1
ressemble à ceci:git lg2
ressemble à ça:et
git lg3
ressemble à ceci:Il convient de noter que ce n'est pas une solution globale, c'est un modèle que vous pouvez modifier, ajouter et corriger à votre guise. Si vous souhaitez les utiliser, ma recommandation est de:
.gitconfig
,.gitconfig
s à l'avenir (ou bien contrôler la version de vos fichiers dot, bien sûr) .Remarque: la réponse a été copiée et améliorée sur la réponse à stackoverflow.com/questions/1057564/pretty-git-branch-graphs car elle est beaucoup plus appropriée ici qu'elle ne l'était là. J'ai laissé la copie sur l'autre question pour des raisons historiques - elle est fermée maintenant, et la réponse est référencée par un tas d'autres réponses.
la source
%C(bold yellow)
avec%C(auto)
pour avoir des couleurs différentes pourHEAD
, locales et les branches éloignées ( ref ).%w()
; De cette façon, vous pouvez également encapsuler correctement les messages de validation plus longs ou sur plusieurs lignes sans perturber le graphique.--abbrev-commit
est là parce que les 2e-3e lignes sont découpées à la main avec des espaces, et je voulais m'assurer absolument qu'il utiliserait le court SHA - donc mieux vaut prévenir que guérir.--decorate
est également là parce que bien que les valeurs par défaut de Git fassent la même chose, cela pourrait être configuré différemment ou différent dans différentes versions de Git - pour celles-ci, je veux absolument la décoration. En fin de compte, les indicateurs supplémentaires / redondants ne sont pas mauvais ici - cela va dans un fichier; ce n'est pas quelque chose que vous tapez tout le temps.lg1
&lg2
vous pouvez voir(origin/test_on_10.8)
montrant la branche distante, et dans lalg2
capture d'écran vous pouvez voir(HEAD -> master, origin/master, origin/HEAD)
montrant les positions locales et éloignées de lamaster
succursale etHEAD
. Cela correspond aux outils GUI de visualisation de branche populaires pour Git do (gitk, SourceTree, TortoiseGit, Tower, Fork, GitX), mais avec un peu plus de verbosité (certains outils GUI utilisent un code couleur) .À l'une de ces recettes (basée sur git log ou gitk), vous pouvez ajouter
--simplify-by-decoration
pour réduire les parties linéaires sans intérêt de l'historique. Cela rend beaucoup plus visible la topologie à la fois. Je peux maintenant comprendre de grandes histoires qui seraient incompréhensibles sans cette option!J'ai ressenti le besoin de publier ceci parce qu'il ne semble pas être aussi connu qu'il devrait l'être. Il n'apparaît pas dans la plupart des questions Stack Overflow sur la visualisation de l'histoire, et il m'a fallu pas mal de recherches pour trouver - même après avoir su que je le voulais! Je l'ai finalement trouvé dans ce rapport de bogue Debian . La première mention sur Stack Overflow semble être cette réponse d'Antoine Pelisse.
la source
--simplify-by-decoration
rend si clair ce qui se passe.git log --graph --all --simplify-by-decoration
fonctionne aussi bien.--simplify-by-decoration
tout en ajoutant n commits avant / après chaque commit déocratisé (comme-B
et-A
pourgrep
).Gitk
parfois pénible à lire.Me motiver à écrire GitVersionTree .
la source
99,999% de mon temps regarde l'histoire
git lg
et les 0,001% sont passésgit log
.Je veux juste partager deux alias de journal qui pourraient être utiles (configurer à partir de .gitconfig):
git lg
affichera l'historique de la branche actuelle.git hist
verra tout l'historique de la branche.la source
Jetez un œil à Gitkraken - une interface graphique multiplateforme qui montre la topologie de manière lucide.
Voici un rapide didacticiel vidéo sur certaines fonctionnalités avancées.
la source
J'aime, avec
git log
, faire:(également avec --all, pour afficher également les branches distantes)
Fonctionne avec les dernières versions de Git: introduites depuis 1.6.3 ( jeu, 7 mai 2009 )
Vous pouvez également limiter la durée de l'affichage du journal (nombre de validations):
(n'afficher que les 5 derniers commits)
Ce que je n'aime pas dans la solution actuellement sélectionnée, c'est:
Il a affiché beaucoup trop d'informations (quand je veux seulement regarder un bref résumé):
gitk
est génial, mais me force à quitter la session shell pour une autre fenêtre, alors que l'affichage rapide des n derniers validations est souvent suffisant.la source
Gitg est un excellent outil pour Linux, similaire à Gitx pour OS X. Il suffit d'exécuter 'gitg' sur la ligne de commande quelque part dans la structure arborescente de votre référentiel (comme avec gitx).
la source
gitg --all
, si vous voulez éviter de déblayer dans le menu déroulant.J'ai trouvé "git-big-picture" assez utile: https://github.com/esc/git-big-picture
Il crée de jolis graphiques 2D en utilisant dot / graphviz au lieu des vues plutôt linéaires et "unidimensionnelles" produites par Gitk et ses amis. Avec l'option -i, il affiche les points de branchement et les validations de fusion mais laisse de côté tout ce qui se trouve entre les deux.
la source
Un bel outil basé sur le Web n'est pas génial . Il s'exécute sur n'importe quelle plate-forme prise en charge par node.js & git. Il y a une vidéo sur la façon dont cela fonctionne pour ceux qui trouvent ce genre de choses plus facile que de lire ...
la source
Jetez un œil à BranchMaster .
Je l'ai écrit pour visualiser la structure d'une branche complexe, en regroupant tous les commits entre eux sur une seule ligne. Les chiffres indiquent le nombre de validations.
la source
Personne n'a mentionné
tig
? Il ne plie pas les branches comme "BranchMaster", mais ...Il est rapide, s'exécute dans le terminal.
Parce qu'il est si rapide (+ contrôle du clavier) que vous obtenez un excellent UX, c'est presque comme mon "
ls
" pour les répertoires contenant des dépôts git.https://jonas.github.io/tig/
Il a les raccourcis habituels,
/
pour rechercher, etc.(ps. c'est le terminal en arrière plan de cette capture d'écran, ça a l'air mieux de nos jours, mais mon ordinateur refuse de faire une capture d'écran, désolé)
(pps. J'utilise aussi gitkraken et j'ai des visualisations très claires, mais c'est beaucoup plus lourd que
tig
)la source
Tortoise Git a un outil appelé "Revision Graph". Si vous êtes sous Windows, c'est aussi simple que de cliquer avec le bouton droit sur votre dépôt -> Tortoise Git -> Graphique de révision.
la source
Giggle dessine de très beaux graphiques.
la source
J'utilise les alias suivants.
Il contient plus d'informations dans le jeu de couleurs que les alias que j'ai vu ci-dessus. Cela semble également assez courant, vous pouvez donc avoir une chance qu'il existe dans l'environnement d'autrui ou qu'il soit possible de le mentionner dans une conversation sans avoir à l'expliquer.
Avec des captures d'écran et une description complète ici: http://blog.kfish.org/2010/04/git-lola.html
la source
Pour les utilisateurs de Mac, consultez (sans jeu de mots) l'outil gratuit et open source GitUp: http://gitup.co/
J'aime la façon dont les graphiques sont affichés, c'est plus clair que certains des autres outils que j'ai vus.
Le projet est ici: https://github.com/git-up/GitUp
la source
J'ai cet
git log
alias~/.gitconfig
pour afficher l'historique du graphique:Avec l'alias en place,
git l
affichera quelque chose comme ceci:Dans Git 2.12 +, vous pouvez même personnaliser les couleurs de ligne du graphique en utilisant l'
log.graphColors
option de configuration.Quant au format des logs, il est similaire à
--oneline
, avec l'ajout du nom de l' auteur (respectant.mailmap
) et de la date relative de l'auteur . Notez que la%C(auto)
syntaxe, qui indique à Git d'utiliser les couleurs par défaut pour le hachage de validation, etc. est prise en charge dans Git> = 1.8.3 .la source
J'ai trouvé cet article de blog qui montre de manière concise:
Je crée généralement un alias pour la commande ci-dessus:
et simple à utiliser
gl
.Vous pouvez également ajouter l'alias à la configuration git. Ouvrez
~/.gitconfig
et ajoutez la ligne suivante à [l'alias]et utilisez-le comme ceci:
git lg
la source
Mon alias préféré personnel, via .gitconfig, est:
la source
Pour ceux qui utilisent l' éditeur de texte VSCode , considérez l' extension d'historique Git par D. Jayamanne:
la source
Gitx est également un outil de visualisation fantastique si vous êtes sous OS X.
la source
Une autre commande git log. Celui-ci avec des colonnes à largeur fixe :
la source
Découvrez
SmartGit
. Cela me rappelle beaucoup la visualisation de la branche TortoiseHg et c'est gratuit pour une utilisation non commerciale.la source
Sous Windows, il existe un outil très utile que vous pouvez utiliser: les extensions git. C'est un outil gui et rend les opérations git très faciles.
Il est également open source.
http://gitextensions.github.io
la source
J'ai essayé
--simplify-by-decoration
mais toutes mes fusions ne sont pas affichées. Donc, au lieu de cela, je taille juste les lignes sans symboles "\" et "/" dans les en-têtes, tout en gardant toujours les lignes avec "(" indiquant les branches immédiatement après cela. Lors de l'affichage de l'historique des branches, je ne suis généralement pas intéressé par les commentaires de validation, donc Je les supprime aussi et je me retrouve avec l'alias de shell suivant.la source
pouvons-nous le rendre plus compliqué?
Que diriez-vous d'un simple journal git --all --decorate --oneline --graph (rappelez-vous un chien = --Tous --Décorer --Oneline --Graph)
la source
Le site officiel de Git a enrôlé des outils GUI spécifiques aux plateformes tierces. Cliquez ici git GUI Tools for Linux Platform
J'ai utilisé
gitg
etGitKraken
pour la plate-forme Linux. Les deux sont bons pour comprendre l'arbre de validationla source