Je joue avec git de manière isolée sur ma propre machine et il m'est difficile de conserver un modèle mental de toutes mes branches et commits. Je sais que je peux faire un git log
pour voir l'historique des commissions d'où je suis, mais existe-t-il un moyen de voir la topographie complète 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
\ / / / /
`-------------'
C'est comme si quelqu'un venant et essayant 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 stream de AccuRev ...
git log --graph
ou gitk
. (Les deux acceptent également --all
qui affichera toutes les branches au lieu de l’actuelle.)
Edit: Pour les noms de branche et une vue compacte, essayez: git log --graph --decorate --oneline
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 nombres, ce qui est moins joli à mon humble avis).
Pour créer un raccourci pour cette commande, vous pouvez modifier 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, comme Sodel the Vociferous notes dans les commentaires, une telle commande de formatage longue est difficile à mémoriser. Généralement, ce n'est pas un problème car vous pouvez le placer dans le fichier ~/.gitconfig
. Cependant, si vous devez parfois vous connecter à une machine distante sur laquelle vous ne pouvez pas modifier le fichier de configuration, vous pouvez utiliser une version plus simple mais plus rapide:
git log --graph --oneline
J'ai 3 alias (et 4 alias-alias pour une utilisation 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
ressemble à ceci:
git lg2
ressemble à ceci:
et git lg3
ressemble à ceci:
_ / Remarque: réponse copiée et améliorée à partir de stackoverflow.com/questions/1057564/pretty-git-branch-graphs car elle est bien plus appropriée ici qu’elle ne l’était. A laissé la copie de l'autre question pour des raisons historiques - elle est maintenant fermée et la réponse est référencée par un tas d'autres réponses.
À 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 inintéressantes de l'historique. Cela rend beaucoup plus visible de la topologie à la fois. Je peux maintenant comprendre les grandes histoires qui seraient incompréhensibles sans cette option!
J'ai ressenti le besoin de poster ceci parce que cela ne semble pas être aussi connu qu'il devrait l'être. Cela n'apparaît pas dans la plupart des questions de Stack Overflow sur la visualisation de l'histoire, et il m'a fallu un peu de recherche 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 .
Gitk
parfois difficile à lire.
Motivez-moi pour écrire GitVersionTree .
"99,999% de mon temps recherche l'historique 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 lg
verra l'historique actuel de la branche.git hist
verra l'historique complet de la branche.J'aime, avec git log
, faire:
git log --graph --oneline --branches
(également avec --all, pour voir aussi les branches distantes)
Fonctionne avec les versions récentes de Git: introduit depuis le 1.6.3 ( jeu., 7 mai 2009 )
L'option "
--pretty=<style>
" de la famille de commandes du journal peut désormais être orthographiée en "--format=<style>
".
De plus,--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 l'étendue 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
(afficher uniquement les 5 derniers commits)
Ce que je n’aime pas dans la solution actuelle est:
git log --graph
Il affiche beaucoup trop d’informations (quand je ne veux regarder qu’un bref résumé):
PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC <[email protected]>
| Date: Sat Nov 14 13:42:20 2009 +0100
|
| a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <[email protected]>
| Date: Sat Nov 14 13:41:50 2009 +0100
|
| a first bug10 fix
|
gitk
c'est bien, mais m'oblige à quitter la session Shell pour une autre fenêtre, alors que l'affichage des n derniers commits rapidement suffit souvent.
Jetez un coup d'œil à Gitkraken -, une interface graphique multi-plateforme qui montre la topologie de manière claire.
Voici un rapide 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 quelque part dans l’arborescence de votre référentiel (identique à gitx).
J'ai trouvé "git-big-picture" plutôt 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 et «unidimensionnelles» produites par Gitk et ses amis. Avec l'option -i, il montre les points de branche et les fusions, mais omet tout ce qui se trouve entre les deux.
Regardez BranchMaster .
Je l'ai écrit pour visualiser la structure complexe des branches, en réduisant toutes les commits entre elles en une seule ligne. Les chiffres indiquent le nombre de commits.
Giggle dessine de beaux graphiques
Tortoise Git a un outil appelé "Graphique de révision". Si vous utilisez Windows, il vous suffit de cliquer avec le bouton droit de la souris sur votre référentiel -> Tortoise Git -> Graphique de révision.
Personne n'a mentionné tig
? Il ne plie pas les branches comme "BranchMaster", mais ...
C'est rapide, fonctionne dans le terminal.
Parce qu'il est si rapide (+ contrôle du clavier), vous obtenez un excellent UX, C'est presque comme mon "ls
" pour les répertoires contenant les dépôts git.
Il a les raccourcis habituels, /
pour rechercher, etc.
(ps. c’est le terminal à l’arrière-plan de cette capture d’écran, cela semble mieux de nos jours, mais mon ordinateur refuse de prendre 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
)
J'utilise les alias suivants.
[alias]
lol = log --graph --decorate --pretty=oneline --abbrev-commit
lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
Il y a plus d'informations dans le jeu de couleurs que les alias que j'ai vus ci-dessus. Cela semble aussi être assez courant, de sorte que vous pourriez avoir une chance de le voir exister dans l'environnement d'un autre ou de pouvoir le mentionner dans une conversation sans devoir l'expliquer.
Avec des captures d'écran et une description complète ici: http://blog.kfish.org/2010/04/git-lola.html
J'ai cet alias git log
dans ~/.gitconfig
pour afficher l'historique du graphique:
[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
affichera quelque chose comme ceci:
Dans Git 2.12 +, vous pouvez même personnaliser les couleurs de la ligne du graphique à l’aide de l’option log.graphColors
configuration.
En ce qui concerne le format des journaux, il ressemble à --oneline
, avec l’ajout du nom de l’auteur (en respectant .mailmap
) et de la date de l’auteur relative. Notez que la syntaxe %C(auto)
, 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 .
Pour les utilisateurs de Mac, accédez à l'outil gratuit et gratuit 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
J'ai trouvé cet article de blog qui montre de 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 simple, utilisez simplement gg
.
Pour ceux qui utilisent l'éditeur de texte VSCode , considérons l'extension Git History de D. Jayamanne:
Mon alias préféré personnel, 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"
Gitx est également un outil de visualisation fantastique si vous utilisez OS X.
Ancien post, mais consultez SmartGit
. Cela rappelle beaucoup la visualisation de la branche Tortoise HG et est gratuit pour une utilisation non commerciale.
Une autre commande de journal git. Celui-ci avec colonnes de largeur fixe :
git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short
Sous Windows, il existe un outil très utile que vous pouvez utiliser: les extensions git. C'est un outil graphique qui rend les opérations git très faciles.
En outre, il est open source.
pouvons-nous rendre les choses plus compliquées?
Que diriez-vous de simple Git log --all --decorate --oneline --graph (rappelez-vous A Dog = --All --Decorate --Oneline --Graph
J'ai essayé --simplify-by-decoration
mais toutes mes fusions ne sont pas affichées. Donc, au lieu de cela, je taille simplement les lignes sans les symboles "\" et "/" dans les en-têtes, tout en conservant les lignes avec "(" indiquant les branches juste après). Je les supprime aussi et je me retrouve avec l'alias 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/).*/)/'
}
Le site officiel de Git a fait appel à des outils d’interface graphique spécifiques à la plateforme. Cliquez ici Outils d'interface graphique git pour plate-forme Linux
J'ai utilisé gitg
et GitKraken
pour la plate-forme Linux. Bon à comprendre l’arbre de commit