Visualisation de la topologie des branches en git
je joue avec git dans l'isolement 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'histoire de commit d'où je suis, Mais y a-t-il un moyen de voir la topographie de toute 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
/ / / /
`-------------'
c'est juste que quelqu'un qui vient et essaye de récupérer mon dépôt ont de la difficulté à travailler exactement ce qui se passait.
je suppose que je suis influencé par le Stream browser D'AccuRev ...
28 réponses
git log --graph
ou gitk
. (Les deux acceptent aussi --all
, qui indiquera toutes les branches au lieu de seulement la branche actuelle.)
Edit:
Pour les noms de branches et une vue compacte, essayez: git log --graph --decorate --oneline
j'ai l'habitude d'utiliser
git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"
avec des 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 la 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 pouvez juste utiliser git log --format=oneline
, mais il liera les messages de propagation aux nombres, ce qui semble 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, Sodel la Bruyante remarques dans les commentaires, telles long de la commande mise en forme est difficile à mémoriser. Habituellement, ce n'est pas un problème car vous pouvez le 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
2¢ : j'ai 3 alias (et 4 alias-Alias pour un usage rapide) que je jette normalement dans mon fichier ~/.gitconfig
:
[alias]
lg = !"git lg1"
lg1 = !"git lg1-specific --all"
lg2 = !"git lg2-specific --all"
lg3 = !"git lg3-specific --all"
lg1-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)'
lg2-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
lg3-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset) %C(bold cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)%n'' %C(white)%s%C(reset)%n'' %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'
git lg
/ git lg1
on dirait:
git lg2
ressemble à ceci:
et git lg3
ressemble à ceci:
Note: réponse copiée et améliorée sur la réponse à stackoverflow.com/questions/1057564/pretty-git-branch-graphs puisque c'est beaucoup plus approprié ici qu'il n'y en avait là-bas. Laissé la copie sur l'autre question pour des raisons historiques - il est fermé maintenant, et la réponse est référencée par un tas d'autres réponses.
à n'importe laquelle de ces recettes (basé sur git log ou gitk), vous pouvez ajouter --simplify-by-decoration
pour réduire les parties linéaires inintéressantes de l'histoire. Cela fait beaucoup plus de la topologie visible à la fois. Je peux maintenant comprendre de grandes histoires qui seraient incompréhensibles sans cette option!
j'ai ressenti le besoin de poster ce parce que cela ne semble pas être aussi connu qu'il devrait l'être. Il n'apparaît pas dans la plupart des questions de débordement de pile sur la visualisation de l'histoire, et ça m'a pris pas mal de recherches pour trouver--même après que j'ai su que je le voulais! Je l'ai finalement trouvé dans ce rapport de bogue Debian . La première mention sur le débordement de pile semble être cette réponse par Antoine Pelisse.
"99,999% de mon temps est à la recherche de l'histoire par la git lg
et le 0,001% est par git log
"
je veux juste partager 2 alias de log qui pourraient être utiles. (configurer de .gitconfig)
[Alias]
lg = log --graph --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
hist = log --graph --full-history --all --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
-
git lg
affichera l'historique actuel de la succursale. -
git hist
verra toute l'histoire de la branche.
j'aime, avec git log
, à faire:
git log --graph --oneline --branches
(aussi avec --tous, pour voir aussi les branches éloignées)
fonctionne avec des versions récentes de Git: introduit depuis 1.6.3 ( Thu, 7 May 2009 )
"
--pretty=<style>
" l'option à la famille de log des commandes peut maintenant être orthographié comme "--format=<style>
".
En outre,--format=%formatstring
est un raccourci pour--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 portée de l'affichage du log (nombre de propagations):
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
(afficher que les 5 derniers s'engage)
ce que je n'aime pas de la solution actuellement choisie est:
git log --graph
il a affiché beaucoup trop d'info (quand je veux seulement regarder un résumé rapide):
PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC <vonc@laposte.net>
| Date: Sat Nov 14 13:42:20 2009 +0100
|
| a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <vonc@laposte.net>
| Date: Sat Nov 14 13:41:50 2009 +0100
|
| a first bug10 fix
|
gitk
est grand, mais me force à quitter la session shell pour une autre fenêtre, alors que afficher le dernier n commet rapidement est souvent suffisant.
jetez un oeil à Gitkraken - une interface graphique multiplateforme qui montre la topologie d'une manière lucide.
Voici une tutoriel vidéo sur certaines fonctionnalités avancées.
Gitg est un excellent outil pour Linux, similaire à Gitx pour OS X. Il suffit d'exécuter 'gitg' sur la ligne de commande à partir de quelque part à l'intérieur de la structure arborescente de votre dépôt (identique avec gitx).
j'ai trouvé" git-big-picture "très utile: https://github.com/esc/git-big-picture
il crée de jolis graphes 2D en utilisant dot/graphviz au lieu des vues plutôt linéaires," unidimensionnelles " gitk et les amis produisent. Avec l'option-i, il affiche les points de la branche et fusionne les commits mais laisse tout entre les deux.
un bel outil basé sur le web est ungit . Il fonctionne sur n'importe quelle plate-forme ce noeud.js & git prend en charge. Il ya un vidéo de la façon dont cela fonctionne pour ceux qui trouvent ce genre de choses plus facile que de lire...
regarder BranchMaster .
Je l'ai écrit pour visualiser la structure complexe des branches, en faisant s'effondrer toutes les commits entre elles sur une seule ligne. Les nombres indiquent le nombre de commits.
Tortue gitane possède un outil appelé "graphe de révision". Si vous êtes sous Windows, c'est aussi simple que de cliquer avec le bouton droit de la souris sur votre graphique de révision --> Tortoise Git-->.
j'utilise les alias suivants.
[alias]
lol = log --graph --decorate --pretty=oneline --abbrev-commit
lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
il a plus d'information dans le schéma de couleur que les alias que j'ai vu ci-dessus. Il semble aussi être assez commun, de sorte que vous pourriez avoir une chance de lui existant dans l'environnement d'autres OU être en mesure de le mentionner dans la 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
personne n'a mentionné tig
? Il ne plie pas les branches comme "BranchMaster", mais...
Il est rapide, fonctionne dans le terminal.
parce qu'il est si rapide (+ contrôle de clavier) vous obtenez un grand UX,
c'est presque comme mon " ls
" pour les répertoires contenant des dépôts git.
il a les raccourcis habituels, /
pour rechercher, etc.
(ps. c'est le terminal dans le fond de cette capture d'écran, c'est mieux aujourd'hui, mais mon ordinateur refuse de prendre une capture d'écran, désolé)
(Spa. J'utilise gitkraken aussi bien et a des visualisations très claires, mais il est beaucoup plus lourd que tig
)
j'ai cette git log
alias ~/.gitconfig
pour afficher le graphique de l'histoire:
[alias]
l = log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'
avec l'alias en place, git l
montrera quelque chose comme ceci:
dans Git 2.12 + vous pouvez même personnaliser les couleurs de ligne du graphique en utilisant l'option de configuration log.graphColors
.
quant au format des logs, il est similaire à --oneline
, avec l'ajout du nom d'auteur (concernant .mailmap
) et le date d'auteur relative . Notez que la syntaxe %C(auto)
, qui dit à Git d'utiliser les couleurs par défaut pour le hachage de propagation, etc. est supporté en Git >= 1.8.3 .
j'ai trouvé ce billet de blog qui montre une manière concise:
git log --oneline --abbrev-commit --all --graph --decorate --color
je crée habituellement un alias pour la commande ci-dessus:
alias gg='git log --oneline --abbrev-commit --all --graph --decorate --color'
et utiliser simplement gg
.
mon pseudonyme préféré, via .gitconfig, est:
graph = log --graph --color --all --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"
pour les utilisateurs Mac, checkout (sans jeu de mots) l'outil libre et open source GitUp: http://gitup.co/
j'aime la façon dont les graphiques sont affichés, c'est plus clair que d'autres outils que j'ai vu.
le projet est ici: https://github.com/git-up/GitUp
Gitx est également un outil de visualisation fantastique si vous vous trouvez sur OS X.
vieux post, mais vérifier SmartGit
. Cela rappelle beaucoup la visualisation de la branche HG de la tortue et c'est gratuit pour une utilisation non-commerciale.
une autre commande git log. Celui-ci avec colonnes de largeur fixe :
git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short
pour ceux qui utilisent le VSCode text editor , considérez le Git History Extension par D. Jayamanne:
sous Windows, il y a un outil très utile que vous pouvez utiliser : extensions git. C'est un outil gui qui rend les opérations git très faciles.
aussi c'est open sourcing.
j'ai essayé --simplify-by-decoration
mais toutes mes fusions ne sont pas indiquées. Donc, je n'ai qu'à tailler les lignes sans symboles "\" et "/" aux en-têtes, tout en gardant toujours les lignes avec "(" indiquant les branches immédiatement après cela. En montrant l'histoire de la branche je suis en général peu intéressé par les commentaires de commit, donc je les supprime aussi. Je me retrouve avec l'alias de shell suivant.
gbh () {
git log --graph --oneline --decorate "$@" | grep '^[^0-9a-f]*[\/][^0-9a-f]*\( [0-9a-f]\|$\)\|^[^0-9a-f]*[0-9a-f]*\ (' | sed -e 's/).*/)/'
}
Git site officiel enrôlé certains tiers de la plate-forme d'outils graphiques. Succès ici git GUI Outils pour la Plateforme Linux
j'ai utilisé gitg
et GitKraken
pour la plate-forme linux. Tous les deux bons à comprendre l'arbre de commit
peut-on la rendre plus compliquée?
pourquoi pas simple la commande git log --tous --décorer --oneline --graph (rappelez-vous Un Chien = --Tous --Décorer --Oneline --Graph)