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

711
git
demandé sur agm1984 2009-12-03 12:55:04

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

874
répondu jrockway 2016-07-16 21:49:57

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
438
répondu P Shved 2017-05-23 12:18:24

: 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 lg1

git lg2 ressemble à ceci:

git lg2

et git lg3 ressemble à ceci:

git lg3

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.

343
répondu Slipp D. Thompson 2017-05-23 10:31:37

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

202
répondu Andrew 2017-05-23 10:31:37

Gitk parfois douloureux pour moi de lire.

enter image description here

me Motiver à écrire GitVersionTree .

enter image description here

58
répondu checksum 2013-08-17 10:18:55

"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.
45
répondu Yeo 2017-02-09 23:04:44

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.

40
répondu VonC 2011-11-15 11:57:57

jetez un oeil à Gitkraken - une interface graphique multiplateforme qui montre la topologie d'une manière lucide.

Topology

Voici une tutoriel vidéo sur certaines fonctionnalités avancées.

36
répondu pylang 2016-05-11 11:56:50

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

29
répondu Jack Senechal 2014-10-23 21:15:23

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.

22
répondu Frank Osterfeld 2013-04-25 20:20:23

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

enter image description here

21
répondu Sardathrion 2013-11-04 11:13:41

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.

enter image description here

16
répondu stroyer 2015-03-22 07:36:49

Giggle dessine de beaux graphiques

12
répondu Renat 2011-10-18 08:47:24

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

11
répondu Christian Adam 2017-09-06 08:38:56

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

10
répondu Lokist 2012-10-24 15:00:00

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.

https://jonas.github.io/tig /

il a les raccourcis habituels, / pour rechercher, etc.

The revision graph

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

7
répondu wires 2017-04-21 23:25:56

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:

enter image description here

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 .

7
répondu Eugene Yarmash 2017-08-17 07:35:54

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 .

6
répondu Sadegh 2014-09-16 10:02:14

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"
6
répondu xero 2016-09-01 18:05:45

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

GitUp screenshot

6
répondu Edward T 2017-10-31 00:03:20

Gitx est également un outil de visualisation fantastique si vous vous trouvez sur OS X.

5
répondu kEND 2009-12-03 17:59:55

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.

5
répondu Frederik Struck-Schøning 2012-10-16 09:23:15

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
5
répondu David 2017-04-06 09:01:36

pour ceux qui utilisent le VSCode text editor , considérez le Git History Extension par D. Jayamanne:

enter image description here

3
répondu pylang 2018-06-05 23:42:47

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.

http://gitextensions.github.io

2
répondu loneshark99 2015-12-28 00:36:14

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/).*/)/'
}
1
répondu Isaac To 2015-04-20 01:15:50

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

0
répondu rookie4evr 2018-04-20 20:54:01

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)

0
répondu pixel 2018-08-02 23:27:51