Git trata las líneas que comienzan #
como líneas de comentarios al confirmar. Esto es muy molesto cuando se trabaja con un sistema de seguimiento de tickets y cuando se intenta escribir el número de ticket al comienzo de la línea, por ej.
#123 salt hashed passwords
git simplemente eliminará la línea del mensaje de confirmación. ¿Hay alguna forma de escapar del hash? Lo intenté \
y !
, pero nada funciona. los espacios en blanco anteriores #
se conservan, por lo que tampoco son una solución funcional al problema.
git
commit
ticket-system
ticket-tracking
knittl
fuente
fuente
git config core.commentchar
permite configurar ese carácter de comentario. Vea mi respuesta a continuacióngit commit --cleanup=scissors
será más flexible. Ver detalles en mi respuestaRespuestas:
Este comportamiento es parte del comportamiento
git commit
predeterminado de 'limpieza'. Si desea que las líneas comiencen#
, puede usar un modo de limpieza alternativo.P.ej
Si hace esto, debe tener cuidado de eliminar todas las
#
líneas que no desea que aparezcan en la confirmación.fuente
commit.template
variable de configuración git.git commit --amend --cleanup=whitespace
Tenga en cuenta que, desde git1.8.2 (febrero de 2013) , puede usar un carácter diferente a '
#
' para la línea comentada en el mensaje de confirmación.Eso le permite usar '
#
' para su referencia de número de error.En teoría, podría poner una
core.commentChar
palabra (varios caracteres), pero git 2.0.x / 2.1 será más estricto (Q3 2014).Ver commit 50b54fd por Nguyễn Thái Ngọc Duy (
pclouds
) :config: sé estricto en core.commentChar
git 2.0.x / 2.1 (Q3 2014) agregará una selección automática para
core.commentChar
:Ver commit 84c9dc2
La lista de caracteres candidatos para "auto" son:
Eso significa que un comando como
git commit -m '#1 fixed issue'
cambiará automáticamente commentChar a ';
', porque '#
' se usó en el mensaje de confirmación.fuente
$ git config --global core.commentchar ';'
git config --global core.commentChar auto
Las respuestas aquí son buenas y detalladas, pero para un novato de git como yo, personalizar las opciones de configuración de git no es tan obvio. Aquí hay un ejemplo para cambiar de
#
a;
por caracteres de comentario:Eso es todo lo que necesitas hacer.
fuente
git commit
para abrir el editor configurado para editar un mensaje de confirmación!git -c core.commentChar="|" commit --amend
(reemplace|
con lo que quiera).Puede usar la opción de línea de comando
-m
:fuente
Si está haciendo un rebase interactivo, cuando guarde su mensaje de confirmación sin nada (porque
#
al principio lo ha hecho un comentario y, por lo tanto, se ha ignorado), git le mostrará qué hacer:Entonces, solo modifique el mensaje:
y continúa la rebase:
fuente
git commit --cleanup=scissors
debería ser usado. Se agregó a Git v2.0.0 en 2014.05.21de
git commit --help
fuente
commit.cleanup = whitespace
y eliminar# …
comentarios a mano, como ya ha sugerido @CharlesBailey.scissors
-mode solo limpia adicionalmente la sintaxis de tijera utilizada porgit
format-patch
/mailinfo
/am
; sí no utilizar la…-- >8 --…
sintaxis al añadir comentarios a los mensajes de confirmación .# ...
comentarios por completo. 2. No estoy tan seguro de la segunda parte de tu comentario, elscissors
modo definitivamente está engit commit --help
. ¿Qué versión degit
estás usando? @ SlippD.Thompsonwhitespace
el modo ofrece la eliminación de 1. líneas vacías iniciales y finales, 2. espacios en blanco finales, 3. contraer líneas vacías consecutivas.scissors
ofrece la eliminación de 1. líneas vacías iniciales y finales, 2. espacios en blanco finales, 3. colapsan líneas vacías consecutivas, 4. todo desde (e incluyendo) la línea# -…- >8 -…-
. Sin embargo, las líneas de tijera (# -…- >8 -…-
) solo se insertan cuando se usagit-format-patch
/mailinfo
/am
. Por lo tanto, para un flujo de trabajogit-commit
/merge
/rebase
/ normalcherry-pick
, elscissors
modo de extracción ofrece cero beneficios sobre elwhitespace
modo. v2.11.0git commit --cleanup=scissors
SÍ antepone la# ------------------------ >8 ------------------------
línea antes de lagit status
información. Como a continuación: `# ------------------------> 8 ------------------- ----- # No toque la línea de arriba. # Todo lo siguiente se eliminará. # En la rama maestra # # Confirmación inicial # # Cambios a confirmar: # archivo nuevo: .gitignore `# ------------------------ >8 ------------------------
txt anterior al estado "Parece que puedes estar ..." _ cuando lo usasscissors
; sin embargo, inserta la línea de tijera después del# Conflicts: …
texto. Lo habíacommit.status = false
configurado en mi.gitconfig
, así que no estaba viendo ningún texto de estado, solo el texto de conflictos. Estoy corregido; cambiando para votar.Use un prefijo diferente para el número de boleto. O anteponga una palabra al número de ticket, como "Bug # 42". O anteponga un solo carácter de espacio a la línea; si desea eliminar ese espacio en blanco, puede agregar un enlace de compromiso para eso.
Personalmente, preferiría que este tipo de manipulación de mensajes de compromiso no sea realizada por un gancho, ya que puede ser muy irritante cuando se activa cuando no lo desea. La solución más fácil es probablemente repensar el problema.
fuente
#xxx
ocurrir en cualquier parte del mensaje de confirmación se vinculará con el problema. No tiene que ser al comienzo de la confirmación. ¿Quizás esto es algo que ha cambiado en los últimos cinco años?Todos mis commits comienzan con,
#issueNumber
así que pongo este repetitivo en mivim .git/hooks/commit-msg
:Supongamos que tenemos una rama
#15
y hacemos un mensaje de confirmaciónadd new awesome feature
. Con este enfoque, el mensaje de confirmación final será#15 add new awesome feature
.fuente