Ajoutez un saut de ligne à 'git commit -m' depuis la ligne de commande

J'utilise Git depuis la ligne de commande et j'essaie d'ajouter un saut de ligne au message de validation (en utilisant git commit -m "") sans accéder à Vim.

Est-ce possible?


person Alan Whitelaw    schedule 21.02.2011    source source
comment
À titre de note, voici un lien qui résume les bonnes conventions de message de validation - github. com/erlang/otp/wiki/Writing-good-commit-messages si cela aide quelqu'un.   -  person WeirdElfB0y    schedule 07.01.2016
comment
Quelque chose comme GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -e vous aiderait à éviter vim.   -  person jotik    schedule 05.05.2016


Réponses (17)


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 simplement laisser le devis ouvert, ce qui incitera Bash à entrer 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é hérédoc) :

git commit -F- <<EOF
Message

goes
here
EOF
person Simon Richter    schedule 21.02.2011
comment
La réponse de @Peter Farmer mentionne plus tard que la convention Git ressemble apparemment à : 1 ligne pour le résumé, deux sauts de ligne, puis un message détaillé. - person Nick Spacek; 14.10.2011
comment
Voir également le message ci-dessous de @esse. Un simple retour chariot fait l’affaire. - person Hakan Ensari; 05.07.2012
comment
Plus précisément, voir ce post par @esse. - person imy; 14.04.2014
comment
ici, le document est très pratique dans un autre contexte où l'on ne veut pas (ne peut pas) créer de fichiers temporaires. - person Vladislavs Dovgalecs; 31.01.2015
comment
@MohamadAli, sous Windows, l'analyse en ligne de commande fonctionne différentement - person Simon Richter; 03.11.2015
comment
J'ai atterri ici en essayant de comprendre comment modifier un message de validation sans toucher à l'éditeur. Ma recette : - person qneill; 04.12.2015
comment
@KelvinShadewing, oui, mais à 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'un autre côté, cela permet d'utiliser des variables. - person Simon Richter; 16.07.2017
comment
@SimonRichter Sous Windows, l'analyse en ligne de commande fonctionne différemment, mais l'utilisation de git commit -m "Hello^ ‹Entrée› World" ne fonctionne toujours pas. L'entrée sera donnée sur 2 lignes, mais en faisant git log, vous ne verrez qu'une seule ligne. - person Basj; 29.06.2018
comment
@SimonRichter Que signifie - après -F ? - person Porcupine; 20.09.2018
comment
@Nikhil, de nombreux programmes prennent en charge un seul tiret comme nom de fichier pour signifier stdin ou stdout. Avec le document ici, la commande git peut lire le texte du message depuis stdin, et l'option -F donne le nom du fichier à partir duquel lire le message. - person Simon Richter; 21.09.2018
comment
À noter : la première méthode fonctionne également avec PowerShell (testée avec la version 5.1, Windows 10, Desktop) - avec des guillemets simples et doubles. En cas de doute, vous pouvez tester ce comportement avec echo "line a [return] line b" [return] avant de l'utiliser dans un git commit. - person Andreas Linnert; 11.10.2018
comment
@SimonRichter, donc -F - avec un espace entre les deux fonctionne également, n'est-ce pas ? - person Enlico; 29.01.2020

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 vide entre deux -m lignes, par exemple :

My head line

My content line.
person Simon    schedule 21.02.2011
comment
Lorsque vous utilisez gitk, cela s'affiche sous forme de messages séparés, mais merci, cela fonctionne. - person Alan Whitelaw; 21.02.2011
comment
Cela présente l'avantage de fonctionner sous Windows, où les astuces mentionnées ailleurs ne fonctionnent pas. Séparez -m pour chaque ligne. Bon! - person ddotsenko; 18.04.2012
comment
Les messages créés à l'aide de cette méthode s'affichent correctement sur GitHub, GitHub pour Windows et TortoiseGit. - person Richard; 27.03.2013
comment
@ddotsenko c'est l'avantage de travailler sous Linux / Mac, où nous avons un shell décent =) - person Ciro Santilli 新疆再教育营六四事件ۍ 28.01.2014
comment
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. - person Amedee Van Gasse; 18.06.2015
comment
Fonctionne sous Windows contrairement aux autres suggestions ! Vous pouvez ajouter des lignes vides comme -m "" (les guillemets sont obligatoires) - person CodeManX; 20.08.2015
comment
C’est la seule vraie réponse à un message de validation multiplateforme à une seule ligne ! - person Mike Covington; 04.10.2015
comment
Notez que cela crée des paragraphes séparés - pas des lignes. Il y aura donc une ligne vide entre chaque deux lignes -m. - person Ohad Schneider; 26.04.2016
comment
Veuillez noter que si vous utilisez Bash sous Windows, la solution précédente basée sur Bash sera suffisante pour cet environnement de terminal. - person Alexander Nied; 23.04.2017
comment
Cette approche fonctionne également pour éditer un message de commit : git commit --amend -m "My head line, updated" -m "My content line, updated." +1 - person Gary Sheppard; 12.06.2017
comment
Juste pour clarifier pour tous ceux qui pourraient mal interpréter le commentaire massivement voté de @ Ohad-Schneider : des paragraphes séparés constituent le comportement souhaité selon la convention commune. - person boweeb; 26.08.2019

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 simplement et appuyez sur Entrée lorsque vous souhaitez une nouvelle ligne, le symbole ">" signifie que vous avez appuyé sur Entrée et qu'il y a une nouvelle ligne. D'autres réponses fonctionnent également.

person esse    schedule 16.02.2012
comment
La réponse d'Abizern m'a clarifié pourquoi cela fonctionne : le shell Bash interprète une pression sur une touche ‹kbd›Entrée‹/kbd› comme une nouvelle ligne jusqu'à ce que le premier caractère guillemet double soit « fermé » (avec un caractère guillemet double suivant). - person Kenny Evitt; 18.07.2013
comment
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 ma part. - person crmpicco; 22.08.2013
comment
Ce n'est pas une fonction particulière 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, à l'exception du développement des variables et des caractères spéciaux d'échappement - c'est pourquoi j'ai choisi des guillemets simples dans ma réponse. - person Simon Richter; 21.12.2014
comment
N'utilisez pas ceci dans zsh ! Le terminal se fermera et vous perdrez ce que vous avez tapé. - person laike9m; 16.06.2015
comment
Fonctionne dans Gitbash pour Windows. - person Omar Tariq; 06.11.2016
comment
Comment accéder à la première ligne de commit. - person viper; 12.12.2016
comment
Comment revenir à la ligne précédente ? - person skytree; 19.11.2017
comment
Fonctionne avec zsh pour moi ! - person ernestkamara; 29.08.2018
comment
Donc git se comporte correctement -- il attend juste que je termine la chaîne. Logique. La seule chose que je remarque, c'est qu'une fois que j'appuie sur Enter et que je suis sur la ligne suivante, je ne peux pas revenir à la ligne ci-dessus et la modifier. Je dois utiliser Ctrl+C pour effacer le message et recommencer (ou copier le msg, le modifier en dehors de git et le coller). Mais c'est toujours une excellente réponse. Merci! - person Chris22; 10.09.2019
comment
Ne fonctionne pas avec Windows CMD. Il s'engage simplement lorsque vous appuyez sur la touche ENTRÉE. - person Tushar; 18.06.2020
comment
Comment s'en sortir ? - person Hyfy; 12.05.2021

Ajout de 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 :

Message de validation Git multiligne dans PowerShell

La capture d'écran provient d'un exemple que j'ai configuré en utilisant PowerShell avec Poshgit.

Cela fonctionne dans tous les terminaux et systèmes d'exploitation AFAIK.

Voici un exemple avec bash :

Message de validation multiligne dans git

Résultat de ce commit :

Commit sur plusieurs lignes

person Jon Crowell    schedule 10.01.2014
comment
Super réponse. J'ai cherché cela pendant des lustres et essayé de nombreuses façons différentes de formater mes messages de validation Git, mais celle-ci fonctionne le mieux. Je peux confirmer que cela fonctionne à l'invite avec Git 1.8.2.1. - person crmpicco; 22.08.2014
comment
Dans Powershell, vous pouvez faire `n pour le saut de ligne - person Ecropolis; 24.09.2015
comment
Cela a beaucoup fonctionné pour moi dans Git Bash pour Windows. - person Ulysses Alves; 13.11.2015
comment
Ceci devrait être la réponse choisie car c'est la méthode la plus compatible, elle ne repose sur aucune invite CLI spécifique comme le font certaines autres suggestions. - person ; 08.04.2016
comment
C'est une meilleure réponse et doit être sélectionnée comme réponse. Non seulement cela correspond à 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 suscité des commentaires liés à Windows, il fonctionne également bien sous Linux. - person 0xc0de; 09.04.2018
comment
Je vais essayer celui-ci. - person Chris22; 10.09.2019
comment
En appuyant sur Entrée, vous avez soumis le commit au lieu de commencer une nouvelle ligne... - person Sam Sverko; 14.04.2021
comment
@SamSverko, assurez-vous d'avoir un -m pour le titre et le commentaire sur la première ligne, et n'ouvrez que les guillemets pour le commentaire sur la première ligne. J'ai ajouté une autre capture d'écran qui peut être un peu plus claire. - person Jon Crowell; 15.04.2021
comment
plus un pour inclure une vérification avec le git log -1 - person DRP; 04.05.2021

Vous devriez pouvoir utiliser

git commit -m $'first line\nsecond line'

Extrait du manuel de Bash :

Les mots de la forme $'string' sont traités spécialement. Le mot se développe en chaîne, avec les caractères d'échappement avec barre oblique inverse remplacés comme spécifié par la norme ANSI C.

Cela inclut la prise en charge des nouvelles lignes comme indiqué ci-dessus, ainsi que des codes hexadécimaux et Unicode et autres. Accédez à la section liée pour voir une liste des caractères échappés avec une barre oblique inverse.

person Dennis Williamson    schedule 21.02.2011
comment
@rsy : Quelle version de Bash utilisez-vous ? Que voyez-vous lorsque vous faites echo $'one\ntwo' ? - person Dennis Williamson; 02.06.2015
comment
rsy$ bash --version GNU bash, version 3.2.53(1)-release (x86_64-apple-darwin13) Copyright (C) 2007 Free Software Foundation, Inc. Le résultat de cette commande est, comme prévu, affiché dans deux formats différents. lignes! - person ccoutinho; 03.06.2015
comment
pour moi sous Windows 7, c'est la meilleure option Merci - person Mohamad Ali; 03.11.2015
comment
Le $ est la clé ici et je ne l'ai pas remarqué au premier coup d'œil. Sinon, je reçois juste un \n au milieu de mon message. - person ChrisBob; 30.03.2017
comment
@ChrisBob : Merci d'avoir souligné à quel point il est facile de rater cela. J'ai mis à jour ma réponse pour l'expliquer et inclure un lien vers la documentation. - person Dennis Williamson; 30.03.2017
comment
Vous n'avez même pas besoin d'utiliser le $'...' pour toute la chaîne ; l'utiliser 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 démarrer votre $'string'. - person PlasmaBinturong; 30.01.2019
comment
@PlasmaBinturong : C'est vrai, mais pour moi, cela semble beaucoup plus compliqué et il serait plus facile de manquer de s'assurer que toutes les citations supplémentaires correspondent. - person Dennis Williamson; 30.01.2019
comment
Notez que cela ne fonctionne pas avec la signature GPG activée. - person Paul Razvan Berg; 04.06.2020
comment
Comment puis-je faire cela si j'ai d'abord mis MSG="first line\nsecond line" dans une variable ? … -m $'$MSG' ne fonctionnera pas. - person white_gecko; 09.11.2020

Depuis la documentation Git :

-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 distincts.

Donc, si vous cherchez à regrouper plusieurs messages de validation, cela devrait faire l'affaire :

git commit -m "commit message1" -m "commit message2"
person Saravanan M    schedule 26.08.2016
comment
Solution agnostique (indépendante du shell). Merci pour cela. Nous devons RTFM :) - person Mat M; 22.01.2019

Faire quelque chose comme

git commit -m"test\ntest"

ça ne marche pas, mais quelque chose comme

git commit -m"$(echo -e "test\ntest")"

ça marche, mais ce n'est pas très joli. Vous configurez une commande git-commitlb dans votre PATH qui fait quelque chose comme ceci :

#!/bin/bash

message=$1

git commit -m"$(echo -e "$message")"

Et utilisez-le comme ceci :

git commitlb "line1\nline2\nline3"

Mot d'avertissement, j'ai le sentiment que la convention générale est d'avoir une ligne de résumé comme première ligne, puis deux sauts de ligne, puis un message étendu dans le message de validation, donc faire quelque chose comme ceci violerait cette convention. Vous pourriez bien sûr faire :

git commitlb "line1\n\nline2\nline3"
person Peter Farmer    schedule 21.02.2011

J'espère que cela ne nous éloigne pas trop de la question publiée, mais définir l'éditeur par défaut puis utiliser

git commit -e

pourrait être beaucoup plus confortable.

person Tobse    schedule 08.12.2014
comment
Celle-ci devrait être la meilleure réponse. - person Galaxy; 05.08.2018
comment
vous pouvez laisser de côté le -e et cela ouvrira toujours l'éditeur - person djangonaut; 31.08.2018
comment
Celle-ci était la réponse que je cherchais. - person Tinmarino; 14.09.2018

Il n’est pas nécessaire de compliquer les choses. Après le -m "text..., la ligne suivante est obtenue en appuyant sur Entrée. Lorsque Entrée est enfoncé, > apparaît. Lorsque vous avez terminé, mettez simplement " et appuyez sur Entrée :

$ 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:   Mon Oct 9 13:30:26 2017 +0200

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 ...

[EDIT 05-05-2021]

Pour les utilisateurs Windows, utilisez GitBash pour Windows. Le Windows cmd intégré ne fonctionne pas avec cette méthode.

person blongho    schedule 09.10.2017
comment
Cette réponse ne reçoit pas assez d'amour ! - person cBlaine; 26.02.2019
comment
C'est une excellente réponse, les nouvelles lignes s'affichent correctement sur Github. La première ligne s'affiche sous forme de titre. - person Yogesh Umesh Vaity; 23.06.2019
comment
Cette méthode ne fonctionne pas avec Windows - person DRP; 04.05.2021
comment
@DRP, utilisez GitBash pour Windows. J'utilise un ordinateur Windows et cela fonctionne parfaitement lorsque j'utilise GitBash pour Windows - person blongho; 06.05.2021

Dans Bash/Zsh, vous pouvez simplement utiliser des sauts de ligne littéraux entre guillemets :

git commit -m 'Multi-line
commit
message'

Les Citation ANSI-C fonctionnent également dans 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. À partir de la documentation sur git-commit :

L'éditeur utilisé pour modifier le message du journal de validation sera choisi parmi la variable d'environnement GIT_EDITOR, la variable de configuration core.editor, la variable d'environnement VISUAL ou la variable d'environnement EDITOR (dans cet ordre). Voir git-var pour plus de détails.

Ainsi, pour éditer votre message en utilisant nano, par exemple, vous pouvez exécuter :

export GIT_EDITOR=nano
git commit
person Eugene Yarmash    schedule 21.02.2011

J'utilise zsh sur un Mac et je peux publier des messages de validation multilignes entre guillemets doubles ("). En gros, je continue de taper et d'appuyer sur Entrée pour les nouvelles lignes, mais le message n'est pas envoyé à Git tant que je n'ai pas fermé les guillemets et retourné .

person Abizern    schedule 21.02.2011
comment
Vous pouvez faire la même chose dans bash. - person Peter Farmer; 21.02.2011

Si vous utilisez Bash, appuyez sur C-x C-e (Ctrl+x Ctrl+e), et cela ouvrira le commande actuelle dans votre éditeur préféré.

Vous pouvez changer l'éditeur préféré en modifiant VISUAL et EDITOR.

C'est ce que j'ai dans mon .bashrc :

export ALTERNATE_EDITOR=''
export EDITOR='emacsclient -t'
export VISUAL='emacsclient -c'
export SUDO_EDITOR='emacsclient -t'
person Aleks-Daniel Jakimenko-A.    schedule 27.08.2016
comment
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 plus aucun moyen de revenir en arrière. - person Aleks-Daniel Jakimenko-A.; 18.04.2017
comment
C'est tellement utile que je ne peux tout simplement pas croire que j'ai vécu mes dernières années sans cela. - person vinczemarton; 12.03.2018

Voici une liste des solutions échouées sous Windows avec le shell cmd.exe standard (pour vous faire gagner du temps d'essais et d'erreurs !) :

  • git commit -m 'Hello Entrée ne fonctionne pas : il ne demandera pas de nouvelle ligne

  • git commit -m "Hello Entrer idem

  • git commit -m "Hello^ Entrer idem

  • git commit -m 'Hello^ Entrée World' semble fonctionner car il demande "Plus ?" et permet d'écrire une nouvelle ligne, mais finalement en faisant git log vous verrez que c'est toujours une seule ligne message...

TL;DR : Même sous Windows, l'analyse en ligne de commande fonctionne différemment, et ^ autorise la saisie multiligne, cela n'aide pas ici.

Enfin, git commit -e est probablement la meilleure option.

person Basj    schedule 29.06.2018

Personnellement, je trouve plus facile de modifier les messages de validation après coup dans vi (ou quel que soit l'éditeur git de votre choix) plutôt que sur la ligne de commande, en faisant git commit --amend juste après git commit.

person amphibient    schedule 14.08.2015
comment
Vous pouvez obtenir ce même résultat sans avoir à modifier en utilisant simplement git commit -e. - person Nathan Hinchey; 16.11.2016
comment
Ou simplement git commit, et cela ouvrira un éditeur avec un modèle de message de validation. - person Jim Stewart; 09.08.2017

Je ne vois personne mentionner que si vous ne fournissez pas de message, cela ouvrira nano pour vous (au moins sous Linux) où vous pourrez écrire plusieurs lignes...

Seulement ceci est nécessaire :

git commit
person Rodrigo Graça    schedule 27.02.2020

Malheureusement, git ne semble autoriser aucun caractère de nouvelle ligne dans son message. Il existe déjà plusieurs solutions raisonnables ci-dessus, mais lors de la création de scripts, celles-ci sont ennuyeuses. Ici, les documents fonctionnent également, mais peuvent aussi être un peu trop ennuyeux à gérer (pensez aux fichiers yaml)

Voici ce que j'ai fait:

git commit \
    --message "Subject" \
    --message "First line$(echo)Second line$(echo)Third Line"

Même si cela reste également 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.

person oliver    schedule 31.03.2019

OMI, la ligne de message de validation initiale est censée être trop courte, précise au lieu d'un paragraphe. Donc utiliser git commit -m "<short_message>" suffira

Après cela, afin de développer le message de validation initial, nous pouvons utiliser

git commit --amend

qui ouvrira le vim et nous pourrons ensuite entrer l'explication du message de validation qui, à mon avis, est plus facile que la ligne de commande.

person Yug Singh    schedule 20.07.2020