Git commit sin mensaje de confirmación

108

¿Cómo puedo realizar cambios sin especificar el mensaje de confirmación? ¿Por qué se requiere por defecto?

Nik
fuente
6
Finalmente, git commit -a --allow-empty-message -m ''ya ni siquiera abrirá un editor. Vea mi respuesta a continuación
VonC
2
En Windows este comando git commit -a --allow-empty-message -m ''hace que se comprometen con el mensaje de consignación " ''", por lo que es mejor utilizar este comando: git commit -a --allow-empty-message -m "".
tav

Respuestas:

137

git generalmente requiere un mensaje que no esté vacío porque proporcionar un mensaje de confirmación significativo es parte de una buena práctica de desarrollo y una buena administración del repositorio. La primera línea del mensaje de confirmación se usa en todas partes dentro de git; para obtener más información, lea "Una nota sobre los mensajes de confirmación de Git" .

Si abre Terminal.app, cden el directorio de su proyecto, y git commit -am ''verá que falla porque no se permite un mensaje de confirmación vacío. Las versiones más nuevas de git tienen el
--allow-empty-messageargumento de la línea de comandos, incluida la versión de git incluida con la última versión de Xcode. Esto le permitirá usar este comando para realizar una confirmación con un mensaje vacío:

git commit -a --allow-empty-message -m ''

Antes de la --allow-empty-messagebandera, tenías que usar el commit-treecomando de plomería. Puede ver un ejemplo del uso de este comando en el capítulo "Raw Git" del libro de Git .

Jeremy W. Sherman
fuente
1
Las versiones más recientes de gittienen el --allow-empty-messageargumento de línea de comandos. Consulte la documentación aquí . Menciona que solías poder lograr lo mismo usando el comando de plomería git-commit-tree.
Jeremy W. Sherman
18
Creo que la frase "proporcionar un mensaje de compromiso significativo es parte de una buena práctica de desarrollo" es simplemente incorrecta; se puede decir que proporcionar un mensaje de compromiso significativo se considera parte de una buena práctica de desarrollo, ya que la declaración es divisiva de todos modos. cree que menos información a veces conduce a menos confusión, especialmente porque git obviamente almacena los cambios reales en el repositorio, y git diffmostrará a la parte interesada exactamente lo que contiene una confirmación, sin depender de descripciones escritas por humanos. Las máquinas deberían salvarnos del trabajo siempre que sea posible.
amn
2
@amn, también comencé a preguntarme acerca de todas esas decenas de miles de mensajes de confirmación bien escritos que he escrito y que nadie jamás leerá. Para mí, el valor de este hábito es que me obliga a analizar los cambios en un intento de describirlos, y esto a veces me hace notar errores. Sin embargo, tienes razón. Consideraré prestar más atención al código y menos al mensaje de confirmación.
Osa
7
Git ya no se usa solo para el desarrollo de código. Cuando actualizo una página wiki de GitHub o un documento de Overleaf LaTeX, generalmente no hay nada que decir porque estoy actualizando la documentación. Todo lo que sea semánticamente significativo sobre el cambio está contenido en el diff. De hecho, me encontré usando el texto del cambio como el mensaje de confirmación en sí: ¡completamente redundante!
Jim Pivarski
1
@amn, a veces la salida de git diffno se explica por sí misma, incluso cuando el autor cree que sí.
Cowlinator
26

Y si le agregas un alias, entonces es aún mejor, ¿verdad?

git config --global alias.nccommit 'commit -a --allow-empty-message -m ""'

Ahora solo hace un nccommit, nc porque no hay comentarios, y todo debería confirmarse.

dalvarezmartinez1
fuente
19

Cuando trabaje en una actualización de código importante, si realmente necesita un punto seguro intermedio, puede hacer lo siguiente:

git commit -am'.'

o más corto:

git commit -am.
lánguido
fuente
¿Y eso qué hace?
Fishinear
Agrega una confirmación con el mensaje '.'
displicente
Utilizo este método cuando literalmente no tengo ningún recuerdo de lo que puse en una confirmación y soy demasiado vago para difftodo.
TheTechRobo36414519
16

Nota: a partir de git1.8.3.2 (julio de 2013), el siguiente comando ( mencionado anteriormente por Jeremy W Sherman ) ya no abrirá un editor:

git commit --allow-empty-message -m ''

Consulte la confirmación 25206778aac776fc6cc4887653fdae476c7a9b5a :

Si se especifica un mensaje vacío con la opción -mde git commit, se inicia el editor.
Eso es inesperado e innecesario.
En lugar de usar la longitud de la cadena del mensaje para verificar si el usuario especificó una, recuerde directamente si -mse dio la opción .


git 2.9 (junio de 2016) mejora el comportamiento de los mensajes vacíos:

Consulte la confirmación 178e814 (6 de abril de 2016) de Adam Dinwoodie ( me-and) .
Consulte la confirmación 27014cb (7 de abril de 2016) de Jeff King ( peff) .
(Combinado por Junio ​​C Hamano - gitster- en el compromiso 0709261 , 22 de abril de 2016)

commit: no ignore un mensaje vacío dado por -m ''

  • " git commit --amend -m '' --allow-empty-message", aunque parece extraño, es una solicitud válida para modificar la confirmación para que no tenga ningún mensaje.
    Debido a la detección errónea de la presencia de -men la línea de comando, terminamos manteniendo el mensaje de registro de la confirmación original.
  • " git commit -m "$msg" -F file" debe rechazarse si $msges una cadena vacía o no, pero debido al mismo error, no se rechazó cuando $msgestá vacío.
  • " git -c template=file -m "$msg"" debería ignorar la plantilla incluso cuando $msgestá vacía, pero no lo hizo y en su lugar usó el contenido del archivo de plantilla.
VonC
fuente
3

No necesitas git para lograr esto. El uso creativo de una función bash funcionará bien. Si no le importan los mensajes, simplemente configure uno predeterminado y olvídelo.

function gitcom() {
  git commit -m "my default commit message"
}

Si se siente realmente aventurero, puede agregar, comprometerse y presionar con un comando

function gitzap() {
  git add . && git commit -m "whatevs" && git push $1 $2
}

Que luego ejecutarías como

gitzap origin master

Incluso podría profundizar y usar parse_git_branch para ahorrarse algunas pulsaciones de teclas allí, o establecer un valor predeterminado común de "origen" y "maestro".

Steven García
fuente
1
¿Podría proporcionar algunos detalles más sobre cómo configurar esta función bash?
adaam
1
Suponiendo que está en OSX o Linux, puede copiar estas funciones y colocarlas en su .profile (debe estar en su carpeta de inicio, si no, créelo). Abra una nueva ventana de consola y esos comandos estarán disponibles para usted. Cualquier cambio realizado en estos archivos requerirá que actualice la sesión de bash para que pueda acelerar las cosas agregando los siguientes alias a ese archivo: alias ea = "subl ~ / .profile" # subl es mi editor de texto, sustitúyalo por el suyo alias er = "source ~ / .profile" # esto se reiniciará Ahora, cuando desee agregar accesos directos, simplemente escriba "ea" (editar alias) Y para actualizar er
Steven García
2
Si se llama a los scripts git-comy git-zap(sin extensiones) y se coloca en alguna parte de ellos git puede encontrarlos (es decir, en algún lugar de su PATH), los trata como git git órdenes regulares y se puede invocar como esto: git com,git zap origin master
Manuzor
1
en bash es function gitcom {o gitcom() {TMK, ¿arreglar?
2

Git requiere una confirmación para tener un comentario, de lo contrario, no aceptará la confirmación.

Puede configurar una plantilla predeterminada con git como su mensaje de confirmación predeterminado o puede buscar el indicador --allow-empty-message en git. Creo (no estoy 100% seguro) que puedes reconfigurar git para aceptar mensajes de confirmación vacíos (lo cual no es una buena idea). Normalmente, cada confirmación debe ser un poco de trabajo que se describe en su mensaje.

Daniel Kurka
fuente
1
No estoy seguro de por qué esta respuesta fue rechazada. Estoy de acuerdo en que forzar a Git a aceptar mensajes de confirmación vacíos, o usar un mensaje como 'guardar', es una mala idea. Deja de luchar y aprende la maldita herramienta.
Jezen Thomas
1

Encontré la solución más simple:

git commit -am'save'

Eso es todo, trabajará alrededor del mensaje de confirmación de git.

incluso puede guardar ese elogio en una fiesta u otras cosas para que sea más simple.

Los miembros de nuestro equipo siempre escriben esos mensajes, pero casi nadie volverá a verlos.

El mensaje de confirmación es algo que mata el tiempo al menos en nuestro equipo, así que lo ignoramos.

hombre de bronce
fuente
1

Tengo la siguiente configuración en mi proyecto privado:

git config alias.auto 'commit -a -m "changes made from [device name]"'

De esa manera, cuando tengo prisa lo hago

git auto
git push

Y al menos sé de qué dispositivo se hizo la confirmación.

e18r
fuente
-5

El mensaje de confirmación es una práctica recomendada que se debe seguir en todo momento. A menos que sea el único desarrollador y eso no va a cambiar pronto.

git commit -a -m 'asdfasdfadsfsdf'
coloradoblue
fuente
eso es una especie de broma. Pero para pequeñas confirmaciones que TIENES que hacer para enviar los cambios a heroku (por ejemplo), está bien en la instancia de desarrollador único.
coloradoblue