La sortie la plus courte possible du journal git contenant l'auteur et la date

465

Comment puis-je afficher une sortie de journal git avec (au moins) ces informations:

* author
* commit date
* change

Je veux qu'il soit compressé à une ligne par entrée de journal. Quel est le format le plus court possible pour cela?

(essayé --format=onelinemais cela ne montre pas la date)

Jesper Rønn-Jensen
la source
2
Peut-être que vous aimez ma version colorée: stackoverflow.com/a/49534733/2292766
Hannes Schneidermayer

Réponses:

700

git log --pretty=format:"%h%x09%an%x09%ad%x09%s"

a fait le travail. Cela produit:

  fbc3503 mads    Thu Dec 4 07:43:27 2008 +0000   show mobile if phone is null...   
  ec36490 jesper  Wed Nov 26 05:41:37 2008 +0000  Cleanup after [942]: Using timezon
  ae62afd tobias  Tue Nov 25 21:42:55 2008 +0000  Fixed #67 by adding time zone supp
  164be7e mads    Tue Nov 25 19:56:43 2008 +0000  fixed tests, and a 'unending appoi
  93f1526 jesper  Tue Nov 25 09:45:56 2008 +0000  adding time.ZONE.now as time zone 
  2f0f8c1 tobias  Tue Nov 25 03:07:02 2008 +0000  Timezone configured in environment
  a33c1dc jesper  Tue Nov 25 01:26:18 2008 +0000  updated to most recent will_pagina

Inspiré par la question stackoverflow: "sortie de journal git comme svn ls -v" , j'ai découvert que je pouvais ajouter les paramètres exacts dont j'avais besoin.

Pour raccourcir la date (sans afficher l'heure), utilisez --date=short

Au cas où vous seriez curieux de savoir quelles étaient les différentes options:
%h= hachage de validation abrégé
%x09= tabulation (caractère pour le code 9)
%an= nom de l'
%adauteur = date de l'auteur (le format respecte --date = option)
%s= sujet
De kernel.org/pub/software/scm /git/docs/git-log.html (section PRETTY FORMATS) par commentaire de Vivek.

Jesper Rønn-Jensen
la source
6
... et il est également utile d'ajouter date=shortcomme cdunn2001 le suggère dans une autre réponse
Jesper Rønn-Jensen
10
Mon oneliner (court) préféré est maintenant de changer la date avant l'auteur et d'utiliser la date courte:git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
Jesper Rønn-Jensen
144
git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
Ajoutez du piquant
16
Tableau des colonnes à largeur fixe:alias glop="git log --pretty=format:'%C(yellow)%h|%Cred%ad|%Cblue%an|%Cgreen%d %Creset%s' --date=short | column -ts'|' | less -r"
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
15
Au cas où vous seriez curieux de savoir quelles étaient les différentes options:% h = hachage de validation abrégé,% x09 = tabulation (caractère pour le code 9),% an = nom de l'auteur,% ad = date de l'auteur (le format respecte --date = option), % s = sujet. Depuis kernel.org/pub/software/scm/git/docs/git-log.html (section PRETTY FORMATS)
Vivek
204

J'utilise ces deux paramètres .gitconfig:

[log]
  date = relative
[format]
  pretty = format:%h %Cblue%ad%Creset %ae %Cgreen%s%Creset

% ad est la date de l'auteur, qui peut être remplacée par --dateou l'option spécifiée dans la strophe [log] dans .gitconfig. J'aime la date relative car elle donne une idée immédiate du moment où les choses ont été validées. La sortie ressemble à ceci:

6c3e1a2 2 hours ago [email protected] lsof is a dependency now.
0754f18 11 hours ago [email protected] Properly unmount, so detaching works.
336a3ac 13 hours ago [email protected] Show ami registration command if auto register fails
be2ad45 17 hours ago [email protected] Fixes #6. Sao Paolo region is included as well.
5aed68e 17 hours ago [email protected] Shorten while loops

Tout cela est bien sûr en couleur, il est donc facile de distinguer les différentes parties d'une ligne de journal. C'est aussi la valeur par défaut lors de la frappe à git logcause de la section [format].

MISE À JOUR 2014: Puisque git prend désormais en charge le remplissage, j'ai un bon amendement à la version ci-dessus:

pretty = format:%C(yellow)%h %Cblue%>(12)%ad %Cgreen%<(7)%aN%Cred%d %Creset%s

Cette droite aligne les dates relatives et la gauche aligne les noms des committers, ce qui signifie que vous obtenez un aspect de colonne qui est agréable pour les yeux.

Capture d'écran

  SS # 1

MISE À JOUR 2016: Étant donné que la signature de validation GPG est en train de devenir une chose, j'ai pensé mettre à jour ce post avec une version qui inclut la vérification de signature (dans la capture d'écran, c'est la lettre magenta juste après la validation). Une brève explication du drapeau:

% G?: Affiche "G" pour une bonne signature (valide), "B" pour une mauvaise signature, "U" pour une bonne signature avec une validité inconnue et "N" pour aucune signature

Les autres changements incluent:

  • les couleurs sont maintenant supprimées si la sortie est autre chose que le tty (ce qui est utile pour le grepping, etc.)
  • git log -g contient maintenant le sélecteur reflog.
  • Enregistrez 2 parens sur les refnames et placez-les à la fin (pour préserver l'alignement des colonnes)
  • Tronquer les dates relatives si elles sont trop longues (par exemple 3 years, 4..)
  • Tronquer les noms de commiter (peut être un peu court pour certains ppl, modifiez simplement le %<(7,trunc)ou consultez la fonctionnalité git .mailmap pour raccourcir les noms de commiter)

Voici la configuration:

pretty = format:%C(auto,yellow)%h%C(auto,magenta)% G? %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(7,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D

Dans l'ensemble, l'alignement des colonnes est maintenant beaucoup mieux préservé au détriment de certains caractères (espérons-le) inutiles. N'hésitez pas à modifier si vous avez des améliorations, j'aimerais que la couleur du message dépende de la signature d'un commit, mais il ne semble pas que cela soit possible en atm.

Capture d'écran

Capture d'écran de git log

andsens
la source
3
Vous pouvez raccourcir encore plus les lignes en utilisant un mailmap . J'ai abrégé les noms des collègues de mon lieu de travail jusqu'à leur prénom :-)
andsens
2
Les réponses au format --pretty sont bonnes, et la tigréponse donne de l'interactivité sans configuration requise, mais celle-ci est brillante - elle donne la sortie d'une ligne demandée (avec la couleur pour démarrer!) En utilisant la commande standard `` git log ''. Très agréable.
Brent Faust
Lorsque j'utilise --right-left, je ne reçois plus les > <marques. J'ai essayé d'ajouter %mau format, mais >apparaît à chaque fois, même pour un normal git log. Des indices sur la façon dont les marques se comportent normalement avec le format?
Vituel
1
@AlvaroCavalcanti bien sûr aucun problème! gist.github.com/andsens/3ba598d829e948e1bf816e2c4cd5f282
andsens
2
@ TrầnViệtHoàng --onelinen'est qu'un alias pour --pretty=oneline. format.prettyest le joli format par défaut, mais il n'y a aucun moyen de remplacer format.onelineafaik. Ce que je ferais, c'est d'omettre la pretty = shortlogligne dans la configuration, puis de créer un alias pour l'exécution git log --pretty=shortlog.
andsens
99
git log --pretty=format:"%H %an %ad"

utiliser --date=pour définir un format de date

git log --pretty=format:"%H %an %ad" --date=short
knittl
la source
1
Génial! La prochaine fois, je n'utiliserai probablement que% h sur% H car le hachage est juste un non-sens pour mes yeux humains :)
Jesper Rønn-Jensen
comme vous le souhaitez. je
n'ai
2
Cool! Je n'étais pas au courant de --date = short
Jesper Rønn-Jensen
3
Il suffit de lancer cela (8 ans de retard): le hachage peut ressembler à un non-sens, mais c'est un outil utile si vous souhaitez choisir ou comparer les commits. Souvent, vous
listez
81

N'hésitez pas à utiliser celui-ci:

git log --pretty="%C(Yellow)%h  %C(reset)%ad (%C(Green)%cr%C(reset))%x09 %C(Cyan)%an: %C(reset)%s" -7

Notez le -7à la fin, pour n'afficher que les 7 dernières entrées.

Regardez:

entrez la description de l'image ici

Hannes Schneidermayer
la source
3
--date=shortpeut être ajouté pour le raccourcir.
xuhdev
@Hannes, où sont les noms des succursales?
Pacerier
@Pacerier git logaffiche toujours l'historique de la branche actuellement extraite .
Hannes Schneidermayer
Ajouter %dpour restaurer les "noms de référence" comme (HEAD -> master).
2540625
Pourquoi utiliser resetau lieu de auto?
2540625
49

tig est une alternative possible à l'utilisation de la commande git log , disponible sur les principales distributions open source * nix.

Sur Debian ou Ubuntu, essayez d'installer et d'exécuter comme suit:

$ sudo apt-get install tig

(tig s'installe)

$ tig

(le journal est affiché dans le pager comme suit, avec le hachage de la validation actuelle affiché en bas)

2010-03-17 01:07 ndesigner      changes to sponsors list
2010-03-17 00:19 rcoder         Raise 404 when an invalid year is specified.
2010-03-17 00:06 rcoder         Sponsors page now shows sponsors' level.
-------------------------- skip some lines ---------------------------------
[main] 531f35e925f53adeb2146dcfc9c6a6ef24e93619 - commit 1 of 32 (100%)

Étant donné que le démarquage ne prend pas en charge la coloration du texte, imaginez: colonne 1: bleu; colonne 2: vert; colonne 3: couleur du texte par défaut. Dernière ligne, mise en évidence. Appuyez sur Q ou q pour quitter.


tigjustifie les colonnes sans bords irréguliers , ce qu'un onglet ascii (% x09) ne garantit pas.

Pour un format de date court, tapez D majuscule (note: d minuscule ouvre une vue diff.) Configurez-le en permanence en ajoutant show-date = shortà ~ / .tigrc; ou dans une [tig]section dans .git / configure ou ~ / .gitconfig.

Pour voir un changement complet :

  • appuyez sur Entrée . Un sous-volet s'ouvrira dans la moitié inférieure de la fenêtre.
  • utilisez les touches k , j pour faire défiler la modification dans le sous-volet.
  • en même temps, utilisez les touches haut et bas pour passer de commit à commit.

Puisque tig est distinct de git et apparemment spécifique à * nix, il faut probablement que cygwin s'installe sur Windows. Mais pour fedora Je crois que les commandes d' installation sont $ su, (enter root password), # yum install tig. Pour freebsd essayer % su, (enter root password), # pkg_add -r tig.


Soit dit en passant, tig est bon pour bien plus qu'une simple vue rapide du journal: captures d'écran et manuel

Joe Generic
la source
veuillez fournir un exemple complet. Écrire tigdans ma console me donne simplement une erreur-bash: tig: command not found
Jesper Rønn-Jensen
10
sensationnel. cet outil est fantastique et étonnamment rapide! brew install tig
corrida
si vous utilisez mac, installez brew tig
Pedro Brasileiro
1
sur Windows, les utilisateurs de babun peuventpact install tig
obojdi
34
git log --pretty=format:'%h %ad %s (%an)' --date=short  

ou

git log --pretty=format:'%h %ad %s | %an' --date=short  

... sur la réponse de cdunn2001 ci-dessus: je perdrais l'e-mail de l'auteur et n'inclurais que le nom de l'auteur, selon Jesper et knittl, mais conformément à l'idée de cdunn2001 de maintenir la sortie dans des colonnes de largeur constante pour faciliter la lecture ( bonne idée!). Au lieu d'une colonne séparée justifiée à gauche pour le nom de l'auteur, cependant, j'encapsule ce drapeau à la fin de la commande avec des parenthèses ou le décale avec un tuyau. (Il pourrait s'agir de n'importe quel caractère servant d'aide visuelle à la lecture de la sortie ... bien qu'il puisse être judicieux d'éviter les barres obliques avant ou arrière afin de ne pas confondre la sortie avec un répertoire ou quelque chose.)

Exemple de sortie:

6fdd155 2015-08-10 Fixes casting error in doSave | John Doe
c4f4032 2015-08-10 Fix for IE save. Add help button. | Jane
29a24a6 2015-08-10 Fixes bug in Course | Mac
Sean
la source
31

Utilisez un alias git prédéfini, c'est-à-dire:

$ git work

Créé une fois par commande:

$ git config --global alias.work 'log --pretty=format:"%h%x09%an%x09%ad%x09%s"'

https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases

Ou plus coloré avec le graphique:

$ git config --global alias.work 'log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all'

entrez la description de l'image ici

Míra
la source
Ouais, j'aime bien celui-ci!
Alex
8
git log --pretty=format:'%h %ad  %s%x09%ae' --date=short

Résultat:

e17bae5 2011-09-30  Integrate from development -> main      [email protected]
eaead2c 2011-09-30  More stuff that is not worth mentioning [email protected]
eb6a336 2011-09-22  Merge branch 'freebase' into development        [email protected]

Les trucs à largeur constante sont les premiers. La partie la moins importante - le domaine de messagerie - est la dernière et facile à filtrer.

cdunn2001
la source
4

Pour montrer les commits que j'ai mis en scène qui sont prêts à pousser, je le fais

git log remotes/trunk~4..HEAD --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" --date=short | awk -F'\t' '{gsub(/[, ]/,"",$2);gsub(/HEAD/, "\033[1;36mH\033[00m",$2);gsub(/master/, "\033[1;32mm\033[00m",$2);gsub(/trunk/, "\033[1;31mt\033[00m",$2);print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}' | less -eiFRXS

La sortie ressemble à quelque chose comme:

ef87da7 2013-01-17 haslers      (Hm)Fix NPE in Frobble
8f6d80f 2013-01-17 haslers      Refactor Frobble
815813b 2013-01-17 haslers      (t)Add Wibble to Frobble
3616373 2013-01-17 haslers      Add Foo to Frobble
3b5ccf0 2013-01-17 haslers      Add Bar to Frobble
a1db9ef 2013-01-17 haslers      Add Frobble Widget

Où la première colonne apparaît en jaune, et les «H» «m» et «t» en parentesis montrent la TÊTE, le maître et le tronc et apparaissent dans leurs couleurs habituelles «- décorer»

Le voici avec des sauts de ligne pour que vous puissiez voir ce qu'il fait:

git log remotes/trunk~4..HEAD --date=short
    --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s"
    | awk -F'\t' '{
         gsub(/[, ]/,"",$2);
         gsub(/HEAD/, "\033[1;36mH\033[00m",$2);
         gsub(/master/, "\033[1;32mm\033[00m",$2);
         gsub(/trunk/, "\033[1;31mt\033[00m",$2);
         print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}'

J'ai aliasé "mis en scène" avec:

git config alias.staged '!git log remotes/trunk~4..HEAD --date=short --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" | awk -F"\t" "{gsub(/[, ]/,\"\",\$2);gsub(/HEAD/, \"\033[1;36mH\033[00m\",\$2);gsub(/master/, \"\033[1;32mm\033[00m\",\$2);gsub(/trunk/, \"\033[1;31mt\033[00m\",\$2);print \$1 \"\t\" gensub(/([\(\)])/, \"\033[0;33m\\\\\1\033[00m\",\"g\",\$2) \$3}"'

(Y a-t-il un moyen plus simple d'échapper à cela? C'était un peu difficile de déterminer ce qu'il fallait échapper)

Sam Hasler
la source
Ma version actuelle de ce script est ~ 300LOC et fait beaucoup plus: ¶ - option pour basculer le message de validation en ligne / multiligne¶ - afficher les espaces blancs / les extrémités de ligne en mode en ligne. Par exemple: ¶ - spécifiez la plage via param¶ - Mettez en surbrillance le numéro de problème¶ - mettez en surbrillance / ^ - (Fix | Add | Refactor) / dans les messages de validation¶
Sam Hasler
Pour les citations d'alias robustes automatisées, consultez cette réponse . Vous souhaitez partager votre ~ 300LOC en un clin d'œil?
Tom Hale
Merci Tom! si j'arrive à publier ce script (j'aurais besoin de supprimer certaines informations confidentielles / spécifiques à l'entreprise), je vous cinglerai ici.
Sam Hasler
1

Toutes les suggestions susmentionnées utilisent un %sespace réservé pour le sujet. Je recommande d'utiliser %Bcar le %sformatage préserve les nouvelles lignes et le message de validation de plusieurs lignes apparaît écrasé.

git log --pretty=format:"%h%x09%an%x09%ai%x09%B"
palik
la source
0

Exécutez ceci dans le dossier du projet:

$ git log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all

Et si vous le souhaitez, ajoutez cette ligne à votre ~ / .gitconfig:

[alias]
    ...
    list = log --pretty=format:\"%C(yellow)%h %ar %C(auto)%d %Creset %s, %Cblue%cn\" --graph --all
MUH Mobile Inc.
la source
0

Essayez git log --pretty = fuller, il vous montrera: - Auteur: Auteur Date: Commit: Commit Date:

J'espère que cela t'aides.

Varun Sharma
la source