Question Visualisation de la topologie de branche dans git


Je joue avec git en isolation sur ma propre machine, et j'ai du mal à maintenir un modèle mental de toutes mes branches et de tous mes engagements. 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 toute la topographie de 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
     \   /   /   /   /
      `-------------'

J'ai l'impression que quelqu'un vient et essayer de récupérer mon dépôt aurait du mal à comprendre exactement ce qui se passait.

Je suppose que je suis influencé par AccuRev navigateur de flux...


691
2017-12-03 09:55


origine


Réponses:


git log --graph ou gitk. (Les deux acceptent également --all, qui montrera toutes les branches au lieu de l'actuelle.)

Modifier: Pour les noms de branche et une vue compacte, essayez: git log --graph --decorate --oneline


844
2017-12-03 09:56



J'utilise habituellement

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"

Cela imprimera une 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 simplement utiliser git log --format=oneline, mais il va lier les messages de commit aux numéros, ce qui semble moins à mon humble avis).

Pour créer un raccourci pour cette commande, vous pouvez modifier votre ~/.gitconfig fichier:

[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, comme Sodel le Vocifère notes dans les commentaires, une telle 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 à taper:

git log --graph --oneline

426
2017-12-03 10:07



2 ¢: J'ai 3 alias (et 4 alias-alias pour une utilisation rapide) que je jette normalement dans mon ~/.gitconfig fichier:

[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 ressemble à ça:

git lg1

git lg2 ressemble à ça:

git lg2

et git lg3 ressemble à ça:

git lg3

Note: Réponse copiée de et améliorée sur la réponse à stackoverflow.com/questions/1057564/pretty-git-branch-graphs car c'est beaucoup plus approprié ici qu'ici. 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.


325
2017-12-25 23:29



Pour l'une de ces recettes (basé sur git log ou gitk), vous pouvez ajouter --simplify-by-decoration faire s'effondrer les parties linéaires inintéressantes de l'histoire. Cela rend 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 cela 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 beaucoup de recherche pour trouver - même après que je savais que je le voulais! Je l'ai finalement trouvé dans cette Rapport de bogue de Debian. La première mention sur Stack Overflow semble être cette réponse par Antoine Pelisse.


195
2017-09-22 03:41



Gitk parfois douloureux pour moi de lire.

enter image description here

Motive moi à écrire GitVersionTree.

enter image description here


53
2017-08-17 10:18



"99,999% de mon temps regarde l'histoire par git lg et le 0.001% est par git log"

Je veux juste partager 2 alias de journal qui pourraient être utiles. (configurer à partir 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 lgverra l'historique de la branche actuelle.
  • git hist verra toute l'histoire de la branche.

43
2017-07-21 17:34



J'aime, avec git log, faire:

 git log --graph --oneline --branches

(aussi avec --all, pour visualiser les branches distantes aussi)

Fonctionne avec les versions récentes de Git: introduit depuis 1.6.3 (Jeu. 7 mai 2009)

  • "--pretty=<style>"option à la famille de commandes de journal peut maintenant être orthographié comme"--format=<style>".
      En outre, --format=%formatstring est une main courte 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 durée de l'affichage du journal (nombre de validations):

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

(montre seulement les 5 derniers commits)


Ce que je n'aime pas à propos de la solution actuellement sélectionnée est:

 git log --graph

Il a affiché beaucoup trop d'informations (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 génial, mais me force à quitter la session shell pour une autre fenêtre, alors que l'affichage rapide des n derniers commits est souvent suffisant.


37
2017-12-03 10:09