Comment sortir le journal git avec la première ligne uniquement?

330

J'essaie de personnaliser le format pour git log. Je veux que tous les commits soient affichés sur une seule ligne. Chaque ligne ne doit afficher que la première ligne du message de validation.
J'ai découvert que cela git log --pretty=shortdevrait faire l'affaire, mais sur mon ordinateur, il affiche le journal complet sous la formegit log fait (en plus de l'horodatage).

De plus, j'ai essayé d'utiliser les espaces réservés définis dans la page de manuel . Cependant, je n'ai pas pu trouver de commande pour raccourcir le message du journal. J'ai essayé cette ligne git log --pretty=format:'%h : %s'qui montre le hachage court-circuité %het le message complet%s sur une seule ligne.

J'utilise git version 1.7.3.1.msysgit.0sur Vista.


Peut-être que cela a quelque chose à voir avec la façon dont j'écris mes messages de validation. Voici un exemple:

Added some functionality.
+ Added print function in Foo class.
+ Added conversion from foo to baz.

Donc, avec l'exemple donné, je veux seulement être Added some functionality.sorti avant le hachage de raccourci.

JJD
la source
1
%sest le sujet, pas le message complet.
Josh Lee
Il est vraiment difficile de dire ce que vous voulez réellement. Le shortformat de n'est pas sur une seule ligne, mais (surprise!) onelineEst. Si onelineet %h : %sque vous ne voulez pas, qu'est-ce qui ne va pas avec eux? En particulier, %sest le sujet, la première ligne du message de validation. Cela devrait en effet être une version abrégée. Est-il possible que vous ayez effectué des validations avec une seule longue ligne pour le message et que vous les ayez visualisées d'une manière ou d'une autre avec un habillage de mots?
Cascabel
Tu comprends parfaitement. Le problème est que onelineet %sne produisent pas ce que nous attendons, au moins sur mon ordinateur. J'ai mis à jour mon message avec un exemple de mon message de validation. Peut-être que ça aide.
JJD

Réponses:

544

Avez-vous essayé cela?

git log --pretty=oneline --abbrev-commit

Le problème est probablement qu'il vous manque une ligne vide après la première ligne. La commande ci-dessus fonctionne généralement pour moi, mais je viens de tester sur un commit sans deuxième ligne vide. J'ai le même résultat que vous: tout le message sur une seule ligne.

La deuxième ligne vide est une norme dans les messages de validation git. Le comportement que vous voyez a probablement été implémenté exprès.

La première ligne d'un message de validation est censée être une brève description. Si vous ne pouvez pas le faire sur une seule ligne, vous pouvez en utiliser plusieurs, mais git considère tout avant la première ligne vide comme la "description courte". onelineimprime toute la courte description, donc toutes vos 3 lignes.

Gauthier
la source
Merci! Vous avez résolu le mystère: je n'ai pas de ligne vide après la première ligne de mon message de validation pour séparer le sujet du reste. Néanmoins, ce serait bien si je pouvais le mettre ou le laisser libre.
JJD
1
Aucun problème. En fait, vous êtes libre d'avoir la ligne vide ou non. Seulement que tout votre message devient le message court si vous l'omettez. J'aime cette courte description / description détaillée, et je suppose qu'être limité à une ligne pour la courte description était un problème, d'où l'exigence d'une ligne vide. Vous pouvez toujours diriger la sortie de git logvers un script de filtrage, mais je recommanderais vraiment d'écrire une courte description avec une ligne vide.
Gauthier
89
Il y a aussi git log --oneline --oneline est un raccourci intégré pour "--pretty = oneline --abbrev-commit" utilisé ensemble.
Jeremy Logan
comment vous débarrasser du hashtag raccourci pré-ajouté? Non pas que ce ne soit pas très joli. Mais sans cut. Ce serait awkWard ... (BTW math Q: quelle est la cote le bit suivant dans une séquence de Huffman correctement encodé, au niveau du stockage, est activé ou désactivé? Indice: C'est === 50%.)
Phlip
7
c'était ça tx. Oh, aussi, j'ai une page pleine de s, donc j'ai naturellement ajouté un %pour '%s'. C-;
Phlip
158

Est - git log --onelinece que vous voulez?

9000
la source
1
Je ne veux pas que l'ensemble du message de validation soit fusionné sur une seule ligne. Je veux voir la première ligne de chaque message de validation uniquement.
JJD
41

Un git log meilleur et plus facile en créant un alias . Collez le code ci-dessous dans le terminal une seule fois pour une session. Collez le code dans le profil zshrc ou bash pour le rendre persistant.

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

Production

git lg

Sortie des lignes modifiées

git lg -p

Alternativement (recommandé)
Collez ce code dans le fichier global .gitconfig

[alias]
  lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

Lectures complémentaires.
https://coderwall.com/p/euwpig/a-better-git-log
Lecture avancée.
http://durdn.com/blog/2012/11/22/must-have-git-aliases-advanced-examples/

atilkan
la source
L'exemple est une belle démo de joli format, mais "Coller le code ci-dessous sur le terminal une seule fois" semble faux car il ne crée pas d'alias pour "git lg"
Drone2537
note aux autres, si vous mettez cette commande en lot, remplacez% par %%, remplacez 'par "". résultat = git log --color --graph --pretty=format:"%%Cred%%h%%Creset -%%C(yellow)%%d%%Creset %%s %%Cgreen(%%cr) %%C(bold blue)<%%an>%%Creset" --abbrev-commit %1. Vous pouvez également passer -p à ce fichier bat pour obtenir des lignes modifiées
Dheeraj Bhaskar
30

Cela imprimera uniquement le message (ligne d'objet uniquement) sans hachage :

git log --pretty=format:%s
technophyle
la source
3
%spour le sujet; %bpour le corps; %Bpour les deux ("raw body" dans git-scm.com/docs/pretty-formats )
Mathieu CAROFF
25

Vous pouvez définir un alias global afin d'appeler un journal court de manière plus confortable:

git config --global alias.slog "log --pretty=oneline --abbrev-commit"

Ensuite, vous pouvez l'appeler à l'aide de git slog(cela fonctionne même avec la saisie semi-automatique si vous l'avez activé).

Ce gars brésilien
la source
8

Sans messages de validation, seul le hachage:

git log --pretty=oneline | awk '{print $1}'
otiai10
la source
7
Si vous voulez seulement le hachage ...git log --pretty=format:"%H"
michael_j_ward
Si vous ne voulez que le hachage, vous pouvez également l'utiliser git rev-list HEAD.
Fabio dit Réintégrer Monica le
-8

si vous voulez toujours utiliser git logde cette manière, vous pouvez ajouter un alias git en

git config --global alias.log log --oneline

après cela git logimprimera ce qui serait normalement imprimé pargit log --oneline

bruyant
la source
12
Cela ne fonctionne pas réellement, car (les alias A. git ne peuvent pas remplacer les noms de commandes intégrés) et (B. Il doit y avoir des guillemets "log --oneline").
Max Nanasy