¿Cómo no realizar ningún cambio y un nuevo mensaje?

137

¿Cómo puedo hacer uno nuevo commity crear un mensaje nuevo si no se realizan cambios en los archivos?

¿No es esto posible ya que el código de confirmación (SHA?) Será el mismo?

d -_- b
fuente

Respuestas:

168

Rara vez hay una buena razón para hacer esto, pero el parámetro es --allow-emptypara confirmaciones vacías (sin archivos modificados), en contraste con --allow-empty-messagelos mensajes de confirmación vacíos. También puede leer más escribiendo git help commito visitando la documentación en línea .

Si bien el objeto del árbol (que tiene un hash propio) será idéntico, el commit tendrá un hash diferente, porque presumiblemente tendrá una marca de tiempo y un mensaje diferentes, y definitivamente tendrá un commit padre diferente. Los tres factores están integrados en gitel algoritmo hash del objeto.


No son algunas de las razones es posible que desee un Empty cometen (que incorpora algunos de los comentarios):

  • Como un "compromiso declarativo", para agregar narración o documentación (a través de DavidNeiss ) incluyendo datos posteriores a los hechos sobre la aprobación de pruebas o pelusas (a través de Robert Balicki ).
  • Para probar gitcomandos sin generar cambios arbitrarios (a través de Vaelus ).
  • Para volver a crear un repositorio desnudo eliminado mediante gitolite(a través de Tatsh ).
  • Para crear arbitrariamente una nueva confirmación, como volver a activar las herramientas de compilación (a través de mattLummus ) o por el registro personal o las métricas (a través de DynamiteReed ). Sin embargo, piénselo dos veces: dependiendo de la estructura de su sucursal / combinación, las confirmaciones pueden durar mucho tiempo, por lo que una estrategia de "no comprometer nada" puede contaminar inadvertidamente el repositorio de su equipo con artefactos de flujo de trabajo temporales y dificultar la separación de las revisiones de código de efímera cruft.

Otras estrategias para agregar metadatos a un árbol de confirmación incluyen:

  • Ramas separadas o etiquetas livianas que siempre apuntan a una confirmación de un estado particular (por ejemplo, "última confirmación aceptada" o "confirmación provisional actual").
  • Etiquetas anotadas para una forma de registrar la marca de tiempo, el confirmador y el mensaje, apuntando a una confirmación existente sin agregar una entrada en el árbol de confirmación.
  • git notes asociar una nota mutable encima de una confirmación inmutable existente.
Jeff Bowman
fuente
2
Empecé a seguir el modelo de rama de flujo de git . Cuando crea un devformulario de bifurcación mastery luego una featbifurcación inmediatamente dev, la featbifurcación parece provenir de la masterbifurcación, ya que no hay confirmación distintiva en la devbifurcación de la que featproviene la bifurcación. Una confirmación vacía cuando realiza la devrama por primera vez ayuda a establecer la devrama como su propia rama indefinidamente independiente master. En general, es útil cuando usa ramas como capas y crea dos capas desde una única confirmación
novicio C,
2
Otra razón: si omite algo importante en su mensaje de confirmación antes de presionar, no puede hacerlo commit --amendsi el control remoto no permite la presión forzada. De esta forma, puede permitir que los desarrolladores vean un mensaje importante que va con la confirmación anterior.
Andy J
1
Quiero hacer esto porque presioné un commit, pero olvidé mencionar algo en el mensaje de commit. Nuestros mensajes de compromiso se integran con el software de seguimiento de problemas y de integración continua y el contenido del mensaje de compromiso afecta a esas aplicaciones. ¿Hay una mejor manera? Esta parece ser la mejor solución en mi caso. Lo único que puedo imaginar sería de alguna manera poder revertir la confirmación anterior.
sytech
1
Acabo de usar esto para activar nuestro enlace previo a la confirmación, que crea scripts en la base de datos. Así que hubo cambios, solo git no pudo verlos hasta después de que se ejecutó el script. Podría haberlo ejecutado manualmente, por supuesto, pero eso ejecutaría el script dos veces.
yoyodyn
1
Muy útil al interactuar con el seguimiento de problemas integrado en servidores git como github y gogs.
SimonF
37

Si te entendí bien, quieres hacer una confirmación vacía. En ese caso necesitas:

git commit --allow-empty
Dima
fuente
35

Confirmación vacía con un mensaje

git commit --allow-empty -m "Empty test commit"

Confirmación vacía con un mensaje vacío

git commit --allow-empty --allow-empty-message
Adobels
fuente
3

Si está utilizando un sistema como gitversion Tiene mucho sentido hacer este tipo de confirmación. Podría tener un commit que sea específicamente para eliminar la versión principal utilizando un + semver: comentario principal.

Kevin Johnson
fuente
3

Tal vez como una alternativa más sensata, podría crear una etiqueta anotada (una confirmación con nombre con un mensaje). Ver la git tag -aopción

kan
fuente