Ajouter un saut de ligne à «git commit -m» à partir de la ligne de commande
746
J'utilise Git à partir de la ligne de commande et j'essaye d'ajouter un saut de ligne au message de validation (en utilisant git commit -m "" ) sans entrer dans Vim.
Quelque chose comme GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -eça vous aiderait à éviter vim.
jotik
Réponses:
694
Certes, la façon dont cela se fait dépend de votre shell. Dans Bash, vous pouvez utiliser des guillemets simples autour du message et laisser simplement le devis ouvert, ce qui fera inviter Bash pour une autre ligne, jusqu'à ce que vous fermiez le devis. Comme ça:
git commit -m 'Message
goes
here'
Alternativement, vous pouvez utiliser un "document ici" (également appelé heredoc):
La réponse de @Peter Farmer plus tard mentionne que la convention Git est apparemment quelque chose comme: 1 ligne pour le résumé, deux sauts de ligne, puis un message détaillé.
Nick Spacek du
4
Voir également le post ci-dessous par @esse. Un simple retour chariot fait l'affaire.
Hakan Ensari
6
@MohamadAli, sur Windows, l'analyse en ligne de commande fonctionne différemment
Simon Richter
2
@KelvinShadewing, oui, mais avec la différence que les règles de substitution de shell s'appliquent au message, vous devez donc échapper aux signes dollar et autres métacaractères. D'autre part, il vous permet d'utiliser des variables.
Simon Richter
2
@Nikhil, de nombreux programmes prennent en charge un seul tiret comme nom de fichier pour signifier stdin ou stdout. Avec le document ici , la gitcommande peut lire le texte du message depuis stdin et l' -Foption donne le nom du fichier à partir duquel lire le message.
Simon Richter
515
Si vous voulez juste, disons, un titre et une ligne de contenu, vous pouvez utiliser:
git commit -m "My head line"-m "My content line."
Notez que cela crée des paragraphes séparés - pas des lignes. Il y aura donc une ligne vierge entre chacun des deux-m lignes, par exemple:
Cela a l'avantage de travailler sur Windows où les astuces citées ailleurs ne fonctionnent pas. Séparez -mpour chaque ligne. Agréable!
ddotsenko
8
Les messages créés à l'aide de cette méthode s'affichent correctement sur GitHub, GitHub pour Windows et TortoiseGit.
Richard
12
@ddotsenko c'est l'avantage de travailler sur Linux / Mac, où nous avons un shell décent =)
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
7
De man git commit: -m <msg>, --message = <msg> Utilisez le <msg> donné comme message de validation. Si plusieurs options -m sont données, leurs valeurs sont concaténées sous forme de paragraphes séparés.
Amedee Van Gasse
55
Notez que cela crée des paragraphes séparés - pas des lignes. Il y aura donc une ligne vierge entre chacune des deux -mlignes.
Ohad Schneider
398
En utilisant Git depuis la ligne de commande avec Bash, vous pouvez effectuer les opérations suivantes:
git commit -m "this is
> a line
> with new lines
> maybe"
Tapez et appuyez simplement sur Enterlorsque vous voulez une nouvelle ligne, le symbole ">" signifie que vous avez appuyé Enteret il y a une nouvelle ligne. D'autres réponses fonctionnent également.
La réponse d'Abizern a clarifié pour moi pourquoi cela fonctionne - le shell Bash interprète une pression de touche <kbd> Entrée </kbd> comme une nouvelle ligne jusqu'à ce que le premier caractère entre guillemets doubles soit `` fermé '' (avec un caractère entre guillemets suivant).
Kenny Evitt
1
Je dois convenir qu'il s'agit d'une solution beaucoup plus efficace, plus simple et plus pratique que la réponse acceptée. Cela fonctionne bien pour moi en utilisant Git 1.8.2.1. +1 de moi.
crmpicco
Ce n'est pas une fonction spéciale de la touche Entrée , mais plutôt liée aux guillemets. Que vous utilisiez des guillemets doubles ou simples n'a pas vraiment d'importance, sauf pour l'expansion variable et les caractères spéciaux d'échappement - c'est pourquoi j'ai choisi des guillemets simples dans ma réponse.
Simon Richter
2
Ne l'utilisez pas dans zsh! Le terminal se fermera et vous perdrez ce que vous avez tapé.
Les mots de la forme $ ' string ' sont traités spécialement. Le mot se développe en
chaîne , avec des caractères d'échappement antislash remplacés comme spécifié par la norme C ANSI.
Cela inclut la prise en charge des sauts de ligne comme indiqué ci-dessus, ainsi que les codes hexadécimaux et Unicode et autres. Accédez à la section liée pour voir une liste des caractères d'échappement avec barre oblique inverse.
@rsy: Quelle version de Bash utilisez-vous? Que voyez-vous quand vous le faites echo $'one\ntwo'?
pause jusqu'à nouvel ordre.
1
rsy $ bash --version GNU bash, version 3.2.53 (1) -release (x86_64-apple-darwin13) Copyright (C) 2007 Free Software Foundation, Inc. La sortie de cette commande est, comme prévu, affichée dans deux différents lignes!
ccoutinho
pour moi sur windows 7 c'est la meilleure option Merci
Mohamad Ali
2
Le $ est la clé ici et je ne l'ai pas remarqué à première vue. Sinon, je reçois juste un \ n au milieu de mon message.
ChrisBob
1
Vous n'avez même pas besoin d'utiliser $ '...' pour toute la chaîne; en utilisant ce juste autour du caractère de nouvelle ligne fonctionnera: git commit -m "first line"$'\n'"second line". Notez simplement que vous devez fermer la chaîne précédente avant de commencer votre $'string'.
PlasmaBinturong
95
Ajouter des sauts de ligne à votre commit Git
Essayez ce qui suit pour créer un message de validation sur plusieurs lignes:
git commit -m "Demonstrate multi-line commit message in Powershell"-m "Add a title to your commit after -m enclosed in quotes,
then add the body of your comment after a second -m.
Press ENTER before closing the quotes to add a line break.
Repeat as needed.
Then close the quotes and hit ENTER twice to apply the commit."
Vérifiez ensuite ce que vous avez fait:
git log -1
Vous devriez vous retrouver avec quelque chose comme ceci:
La capture d'écran provient d'un exemple que j'ai configuré à l'aide de PowerShell avec Poshgit.
Réponse géniale. J'ai cherché cela depuis des siècles et j'ai essayé de nombreuses façons de formater mes messages de validation Git, mais cela fonctionne le mieux. Je peux confirmer que cela fonctionne à l'invite avec Git 1.8.2.1.
crmpicco
1
Dans Powershell, vous pouvez faire `n pour la rupture de ligne
Ecropolis
2
Cela a beaucoup fonctionné pour moi dans Git Bash pour Windows .
Ulysses Alves
1
Cela devrait être la réponse choisie car c'est la méthode la plus compatible, cela ne dépend d'aucune invite CLI spécifique comme le font d'autres suggestions.
1
Il s'agit d'une meilleure réponse et doit être sélectionnée comme réponse. Non seulement cela va comme un comportement par défaut et fournit un message de validation beaucoup plus propre, mais il est également un peu plus flexible avec plusieurs -m. De plus, même s'il semble spécifique à Windows et a attiré des commentaires liés à Windows, cela fonctionne aussi bien sous Linux.
0xc0de
44
Faire quelque chose comme
git commit -m"test\ntest"
ne fonctionne pas, mais quelque chose comme
git commit -m"$(echo -e "test\ntest")"
fonctionne, mais ce n'est pas très joli. Vous configurez une git-commitlbcommande dans votre PATHqui fait quelque chose comme ceci:
Un mot d'avertissement, j'ai l'impression que la convention générale est d'avoir une ligne récapitulative comme première ligne, puis deux sauts de ligne, puis un message étendu dans le message de validation, donc faire quelque chose comme ça briserait cette convention. Vous pourriez bien sûr faire:
-m <msg>
--message = <msg>
Utilisez le <msg> donné comme message de validation. Si plusieurs -moptions sont données, leurs valeurs sont concaténées en paragraphes séparés.
Donc, si vous cherchez à regrouper plusieurs messages de validation, cela devrait faire le travail:
vous pouvez laisser de côté le -eet il ouvrira toujours l'éditeur
djangonaut
Celui-ci était la réponse que je cherchais.
Tinmarino
28
Il n'y a pas besoin de compliquer les choses. Après la -m "text...ligne suivante est obtenue en appuyant sur Enter. Lorsque Enterest enfoncé >apparaît. Lorsque vous avez terminé, il vous suffit de mettre "et d'appuyer sur Enter:
$ git commit -m "Another way of demonstrating multicommit messages:
>
> This is a new line written
> This is another new line written
> This one is really awesome too and we can continue doing so till ..."
$ git log -1
commit 5474e383f2eda610be6211d8697ed1503400ee42(HEAD -> test2)Author:**************<*********@gmail.com>Date:MonOct913:30:262017+0200Another way of demonstrating multicommit messages:This is a new line written
This is another new line written
This one is really awesome too and we can continue doing so till ...
C'est une excellente réponse, les nouvelles lignes sont affichées correctement sur Github. La première ligne apparaît comme un en-tête.
Yogesh Umesh Vaity
18
J'utilise zsh sur un Mac et je peux poster des messages de validation sur plusieurs lignes entre guillemets ("). En gros, je continue à taper et à appuyer sur Entrée pour les nouvelles lignes, mais le message n'est envoyé à Git que lorsque je ferme les guillemets et que je reviens .
Vous pouvez également demander à Git d'utiliser un éditeur de votre choix pour modifier le message de validation. Depuis les documents sur git-commit :
L'éditeur utilisé pour modifier le message du journal de validation sera choisi dans la
GIT_EDITORvariable d'environnement, lecore.editor variable de configuration, la VISUALvariable d'environnement ou la EDITOR
variable d'environnement (dans cet ordre). Voir git-var pour plus de détails.
Personnellement, je trouve plus facile de modifier les messages de commit après coup dans vi(ou quel que soit l'éditeur de git de votre choix) plutôt que sur la ligne de commande, en faisant git commit --amendjuste après git commit.
Alors, pourquoi quelqu'un a-t-il voté contre? C'est le moyen le plus pratique de travailler avec des commandes multilignes dans bash, il vous suffit de le configurer une seule fois. J'ai utilisé d'autres suggestions stupides présentées dans d'autres réponses ici, mais une fois que vous avez appris à modifier vos commandes dans votre éditeur de texte préféré, il n'y a tout simplement plus de retour.
Aleks-Daniel Jakimenko-A.
1
C'est tellement déchirant que je n'arrive pas à croire que j'ai vécu mes dernières années sans ça.
BientôtDead
2
Voici une liste des solutions défaillantes sous Windows avec le shell cmd.exe standard (pour vous faire gagner du temps d'essai et d'erreur!):
git commit -m 'HelloEnter ne fonctionne pas: il ne demandera pas de nouvelle ligne
git commit -m "HelloEnter idem
git commit -m "Hello^Enter idem
git commit -m 'Hello^EnterWorld'ressemble à travailler car il demande "Plus?" et permet d'écrire une nouvelle ligne, mais finalement en le faisant git logvous verrez que c'est toujours un message d'une ligne ...
TL; DR: Même si sous Windows, l'analyse syntaxique en ligne de commande fonctionne différemment et ^permet une entrée multiligne, cela n'aide pas ici.
Enfin, git commit -ec'est probablement la meilleure option.
N'utilisez simplement pas cette triste, triste excuse pour une fenêtre "shell".
2018
2
Malheureusement, git ne semble pas autoriser de caractère de nouvelle ligne dans son message. Il existe différentes solutions raisonnables déjà ci-dessus, mais lors de l'écriture de scripts, celles-ci sont ennuyeuses. Ici, les documents fonctionnent également, mais peuvent également être un peu trop ennuyeux à traiter (pensez aux fichiers yaml)
Bien que cela soit toujours aussi moche, cela permet des 'one-liners' qui peuvent encore être utiles. Comme les chaînes sont généralement des variables ou combinées avec des variables, les laideurs peuvent être réduites au minimum.
Je ne vois personne mentionner que si vous ne fournissez pas de message, il ouvrira nano pour vous (au moins sous Linux) où vous pouvez écrire plusieurs lignes ...
GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -e
ça vous aiderait à évitervim
.Réponses:
Certes, la façon dont cela se fait dépend de votre shell. Dans Bash, vous pouvez utiliser des guillemets simples autour du message et laisser simplement le devis ouvert, ce qui fera inviter Bash pour une autre ligne, jusqu'à ce que vous fermiez le devis. Comme ça:
Alternativement, vous pouvez utiliser un "document ici" (également appelé heredoc):
la source
git
commande peut lire le texte du message depuis stdin et l'-F
option donne le nom du fichier à partir duquel lire le message.Si vous voulez juste, disons, un titre et une ligne de contenu, vous pouvez utiliser:
Notez que cela crée des paragraphes séparés - pas des lignes. Il y aura donc une ligne vierge entre chacun des deux
-m
lignes, par exemple:la source
-m
pour chaque ligne. Agréable!man git commit
: -m <msg>, --message = <msg> Utilisez le <msg> donné comme message de validation. Si plusieurs options -m sont données, leurs valeurs sont concaténées sous forme de paragraphes séparés.-m
lignes.En utilisant Git depuis la ligne de commande avec Bash, vous pouvez effectuer les opérations suivantes:
Tapez et appuyez simplement sur Enterlorsque vous voulez une nouvelle ligne, le symbole ">" signifie que vous avez appuyé Enteret il y a une nouvelle ligne. D'autres réponses fonctionnent également.
la source
Vous devriez pouvoir utiliser
Du manuel Bash :
Cela inclut la prise en charge des sauts de ligne comme indiqué ci-dessus, ainsi que les codes hexadécimaux et Unicode et autres. Accédez à la section liée pour voir une liste des caractères d'échappement avec barre oblique inverse.
la source
echo $'one\ntwo'
?git commit -m "first line"$'\n'"second line"
. Notez simplement que vous devez fermer la chaîne précédente avant de commencer votre$'string'
.Ajouter des sauts de ligne à votre commit Git
Essayez ce qui suit pour créer un message de validation sur plusieurs lignes:
Vérifiez ensuite ce que vous avez fait:
Vous devriez vous retrouver avec quelque chose comme ceci:
La capture d'écran provient d'un exemple que j'ai configuré à l'aide de PowerShell avec Poshgit.
la source
Faire quelque chose comme
ne fonctionne pas, mais quelque chose comme
fonctionne, mais ce n'est pas très joli. Vous configurez une
git-commitlb
commande dans votrePATH
qui fait quelque chose comme ceci:Et utilisez-le comme ceci:
Un mot d'avertissement, j'ai l'impression que la convention générale est d'avoir une ligne récapitulative comme première ligne, puis deux sauts de ligne, puis un message étendu dans le message de validation, donc faire quelque chose comme ça briserait cette convention. Vous pourriez bien sûr faire:
la source
De la documentation Git :
Donc, si vous cherchez à regrouper plusieurs messages de validation, cela devrait faire le travail:
la source
J'espère que cela ne mène pas trop loin de la question publiée, mais en définissant l'éditeur par défaut , puis en utilisant
pourrait être beaucoup plus confortable.
la source
-e
et il ouvrira toujours l'éditeurIl n'y a pas besoin de compliquer les choses. Après la
-m "text...
ligne suivante est obtenue en appuyant sur Enter. Lorsque Enterest enfoncé>
apparaît. Lorsque vous avez terminé, il vous suffit de mettre"
et d'appuyer sur Enter:la source
J'utilise zsh sur un Mac et je peux poster des messages de validation sur plusieurs lignes entre guillemets ("). En gros, je continue à taper et à appuyer sur Entrée pour les nouvelles lignes, mais le message n'est envoyé à Git que lorsque je ferme les guillemets et que je reviens .
la source
Dans Bash / Zsh, vous pouvez simplement utiliser des sauts de ligne littéraux entre guillemets:
La cotation ANSI-C fonctionne également en Bash / Zsh:
git commit -m $'Multi-line\ncommit\nmessage'
Vous pouvez également demander à Git d'utiliser un éditeur de votre choix pour modifier le message de validation. Depuis les documents sur git-commit :
la source
Personnellement, je trouve plus facile de modifier les messages de commit après coup dans
vi
(ou quel que soit l'éditeur de git de votre choix) plutôt que sur la ligne de commande, en faisantgit commit --amend
juste aprèsgit commit
.la source
git commit -e
.git commit
, et il ouvrira un éditeur avec un modèle de message de validation.Si vous utilisez Bash, appuyez sur
C-x C-e
( Ctrl+ x Ctrl+e ), et cela ouvrira la commande actuelle dans votre éditeur préféré.Vous pouvez modifier l'éditeur préféré en peaufinant
VISUAL
etEDITOR
.Voilà ce que j'ai dans mon
.bashrc
:la source
Voici une liste des solutions défaillantes sous Windows avec le shell cmd.exe standard (pour vous faire gagner du temps d'essai et d'erreur!):
git commit -m 'Hello
Enter ne fonctionne pas: il ne demandera pas de nouvelle lignegit commit -m "Hello
Enter idemgit commit -m "Hello^
Enter idemgit commit -m 'Hello^
EnterWorld'
ressemble à travailler car il demande "Plus?" et permet d'écrire une nouvelle ligne, mais finalement en le faisantgit log
vous verrez que c'est toujours un message d'une ligne ...TL; DR: Même si sous Windows, l'analyse syntaxique en ligne de commande fonctionne différemment et
^
permet une entrée multiligne, cela n'aide pas ici.Enfin,
git commit -e
c'est probablement la meilleure option.la source
Malheureusement, git ne semble pas autoriser de caractère de nouvelle ligne dans son message. Il existe différentes solutions raisonnables déjà ci-dessus, mais lors de l'écriture de scripts, celles-ci sont ennuyeuses. Ici, les documents fonctionnent également, mais peuvent également être un peu trop ennuyeux à traiter (pensez aux fichiers yaml)
Voici ce que j'ai fait:
Bien que cela soit toujours aussi moche, cela permet des 'one-liners' qui peuvent encore être utiles. Comme les chaînes sont généralement des variables ou combinées avec des variables, les laideurs peuvent être réduites au minimum.
la source
Je ne vois personne mentionner que si vous ne fournissez pas de message, il ouvrira nano pour vous (au moins sous Linux) où vous pouvez écrire plusieurs lignes ...
Seulement cela était nécessaire:
la source