web-dev-qa-db-fra.com

Ajouter un saut de ligne à 'git commit -m' à partir de la ligne de commande

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

Est-ce possible?

662
Alan Whitelaw

Bien sûr, la façon dont cela fonctionne dépend de votre Shell. Dans Bash, vous pouvez utiliser des guillemets simples autour du message et laisser le guillemet ouvert, ce qui rendra l'invite Bash pour une autre ligne jusqu'à la fermeture du guillemet. Comme ça:

git commit -m 'Message

goes
here'

Alternativement, vous pouvez utiliser un "ici document" (également appelé heredoc):

git commit -F- <<EOF
Message

goes
here
EOF
600
Simon Richter

Si vous voulez simplement, par exemple, une ligne de tête et une ligne de contenu, vous pouvez utiliser:

git commit -m "My head line" -m "My content line."
422
Simon

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"

Il suffit de taper et appuyez sur Enter lorsque vous voulez une nouvelle ligne, le symbole ">" signifie que vous avez appuyé sur Enteret il y a une nouvelle ligne. D'autres réponses fonctionnent aussi.

381
esse

Vous devriez pouvoir utiliser

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

De la manuel de Bash :

Les mots de la forme $ ' chaîne ' sont traités spécialement. Word se développe en chaîne , les caractères d'échappement avec barre oblique inversée étant remplacés conformément à la norme ANSI C.

Cela inclut la prise en charge des nouvelles lignes, comme indiqué ci-dessus, ainsi que des codes hex et Unicode et autres. Accédez à la section liée pour voir une liste des caractères d'échappement avec barre oblique inversée.

93
Dennis Williamson

Ajout de sauts de ligne à votre commit Git

Essayez ce qui suit pour créer un message de validation multiligne:

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

Puis vérifiez ce que vous avez fait:

git log -1

Vous devriez vous retrouver avec quelque chose comme ça:

Multi-line Git commit message in PowerShell

La capture d'écran provient d'un exemple que j'ai configuré à l'aide de PowerShell avec Poshgit.

85
Jon Crowell

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

Un mot d'avertissement, j'ai l'impression que la convention générale consiste à avoir une ligne de résumé comme première ligne, puis deux sauts de ligne, puis un message étendu dans le message de validation, si bien que quelque chose comme ceci romprait cette convention. Vous pouvez bien sûr faire:

git commitlb "line1\n\nline2\nline3"
42
Peter Farmer

J'espère que cela ne mène pas trop loin de la question affichée, mais en définissant l'éditeur par défaut puis en utilisant

git commit -e

pourrait être beaucoup plus confortable.

35
Tobse

De documentation Git :

-m <msg>
- message = <msg>
Utilise le <msg> donné comme message de validation. Si plusieurs options -m sont fournies, leurs valeurs sont concaténées en tant que paragraphes distincts.

Donc, si vous cherchez à regrouper plusieurs messages de commit, cela devrait faire le travail:

git commit -m "commit message1" -m "commit message2"
34
Saravanan M

Il n'y a pas besoin de compliquer les choses. Après le -m "text..., on obtient la ligne suivante en appuyant sur Enter. Quand Enter est appuyé _ > apparaît. Lorsque vous avez terminé, mettez simplement " et appuyez 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:   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 ...
22
blongho

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

19
Abizern

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

git commit -m 'Multi-line
commit
message'

ANSI-C citant 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 éditer le message de validation. À partir de la documentation sur git-commit :

L’éditeur utilisé pour éditer 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.

8
Eugene Yarmash

Si vous utilisez Bash, appuyez sur C-x C-e (Ctrl+xCtrl+e) et ouvrira la commande en cours 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'

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

5
amphibient

Voici une liste des solutions ayant échoué sous Windows avec le shell standard cmd.exe (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^Enter _World'_ ressemble à travailler parce qu'il demande "Plus?" et permet d'écrire une nouvelle ligne, mais finalement en faisant _git log_ vous verrez que c'est toujours un message d'une ligne ...

TL; DR: Même si sous Windows, l’analyse en ligne de commande fonctionne différemment , et _^_ permet une entrée multiligne, cela n’aide en rien.

Enfin git commit -e est probablement la meilleure option.

1
Basj

Malheureusement, git ne semble pas autoriser les nouveaux caractères dans son message. Il existe déjà diverses solutions raisonnables ci-dessus, mais lors de la création de scripts, celles-ci sont gênantes. Ici, les documents fonctionnent aussi, mais peuvent aussi être un peu trop ennuyeux à traiter (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 de créer des "lignes uniques" qui peuvent encore être utiles. Comme d'habitude les chaînes sont des variables ou combinées avec des variables, les vilaines peuvent être réduites au minimum.

1
oliver