Agregue salto de línea a ‘git commit -m’ desde la línea de comando

Estoy usando Git desde la línea de comandos y estoy tratando de agregar un salto de línea al mensaje de confirmación (usando git commit -m "" ) sin entrar en Vim.

es posible?

Ciertamente, cómo se hace depende de tu caparazón. En Bash, puede usar comillas simples alrededor del mensaje y puede dejar la cita abierta, lo que hará que Bash solicite otra línea, hasta que cierre la cita. Me gusta esto:

 git commit -m 'Message goes here' 

Alternativamente, puede usar un “documento aquí”:

 git commit -F- < 

Usando Git desde la línea de comando con Bash puedes hacer lo siguiente:

 git commit -m "this is > a line > with new lines > maybe" 

Simplemente escriba y presione Enter cuando quiera una nueva línea, el símbolo “>” significa que ha presionado Enter , y hay una nueva línea. Otras respuestas funcionan también.

Si solo quieres, por ejemplo, una línea de cabeza y una línea de contenido, puedes usar:

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

Deberías poder usar

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

Del manual de Bash :

Las palabras de la forma $ ‘ cadena ‘ se tratan especialmente. La palabra se expande a cadena , con caracteres de barra invertida escapados como se especifica en el estándar ANSI C.

Esto incluye soporte para líneas nuevas como se muestra arriba, más códigos hexadecimales y Unicode y otros. Vaya a la sección vinculada para ver una lista de los caracteres escapados de la barra invertida.

Agregar saltos de línea a su compromiso de Git

Intente lo siguiente para crear un mensaje de confirmación de líneas múltiples:

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

Luego verifica lo que has hecho:

 git log -1 

Deberías terminar con algo como esto:

Mensaje de compromiso de Git multilínea en PowerShell

La captura de pantalla es de un ejemplo que configuré usando PowerShell con Poshgit.

Haciendo algo como

 git commit -m"test\ntest" 

no funciona, pero algo como

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

funciona, pero no es muy bonito Usted configura un comando git-commitlb en su PATH que hace algo como esto:

 #!/bin/bash message=$1 git commit -m"$(echo -e "$message")" 

Y úsalo así:

 git commitlb "line1\nline2\nline3" 

Palabra de advertencia, tengo la sensación de que la convención general es tener una línea de resumen como la primera línea, y luego dos saltos de línea, y luego un mensaje extendido en el mensaje de compromiso, por lo que hacer algo como esto rompería esa convención. Por supuesto, podrías:

 git commitlb "line1\n\nline2\nline3" 

Espero que esto no conduzca demasiado lejos de la pregunta publicada, sino que establezca el editor predeterminado y luego use

 git commit -e 

podría ser mucho más cómodo.

Uso zsh en una Mac, y puedo publicar mensajes de confirmación de varias líneas con comillas dobles (“). Básicamente sigo escribiendo y presiono return para buscar nuevas líneas, pero el mensaje no se envía a Git hasta que cierro las comillas y regreso .

De la documentación de Git :

-m
–mensaje =

Use el
dado como el mensaje de confirmación. Si se dan varias opciones -m , sus valores se concatenan como párrafos separados.

Por lo tanto, si está buscando agrupar varios mensajes de confirmación, debería hacer el trabajo:

 git commit -m "commit message1" -m "commit message2" 

Puedes usar git commit -m "$(echo)" o git commit -m $'\n'

Si está utilizando Bash, presione Cx Ce ( Ctrl + x Ctrl + e ), y se abrirá el comando actual en su editor preferido.

Puede cambiar el editor preferido ajustando VISUAL y EDITOR .

Eso es lo que tengo en mi .bashrc :

 export ALTERNATE_EDITOR='' export EDITOR='emacsclient -t' export VISUAL='emacsclient -c' export SUDO_EDITOR='emacsclient -t' 

No hay necesidad de complicar las cosas. Después del -m "text... la siguiente línea se obtiene al presionar Enter . Cuando se presiona Enter > aparece. Cuando haya terminado, simplemente ponga " y presione Enter :

 $ git commit -m "Another way of demonstrating multicommit msg > > 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 ... 

Personalmente, me resulta más fácil modificar los mensajes de confirmación después del hecho en vi (o lo que sea su editor de git de elección) en lugar de hacerlo en la línea de comando, haciendo git commit --amend justo después de la git commit .

Aquí hay una lista de soluciones que fallan en Windows con el shell cmd.exe estándar (¡para ahorrarle tiempo de prueba y error!):

  • git commit -m 'Hello Enter no funciona: no pedirá una nueva línea

  • git commit -m "Hello Enter idem

  • git commit -m "Hello^ Enter idem

  • git commit -m 'Hello^ Enter World' parece funcionar porque pregunta “¿Más?” y permite escribir una nueva línea, pero finalmente al hacer el git log verás que sigue siendo un mensaje de una línea …

TL; DR: Incluso si en Windows, el análisis de línea de comandos funciona de manera diferente , y ^ permite la entrada de líneas múltiples, no ayuda aquí.

Finalmente, git commit -e es probablemente la mejor opción.