2012-09-18 14 views
68

¿Cómo puedo crear un nuevo commit y crear un nuevo mensaje si no se realizan cambios en los archivos?¿Cómo confirmar ningún cambio y nuevo mensaje?

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

+0

Más para las notas que para el propio código. –

+1

En lugar de hacer lo que está preguntando, use 'git notes' en su lugar. – wjl

+2

@iight Si no ha llevado su código a ninguna parte, también considere 'git commit --amend'. Esto lo llevará de vuelta a la pantalla de confirmación, donde puede editar su mensaje y agregar archivos adicionales a la confirmación si los ha organizado. Tenga en cuenta que, como una rebase, esto hará que su compromiso original sea obsoleto y puede causar un desagradable dolor de cabeza de fusión para cualquiera que basó su código en su compromiso anterior. –

Respuesta

91

Raramente hay una buena razón para hacer esto, pero el parámetro es --allow-empty para confirmaciones vacías, en contraste con --allow-empty-message para mensajes vacíos. También puede leer más escribiendo git help commit o visitando the online documentation.

Mientras que el objeto de árbol (que tiene un hash propio) será idéntico, la confirmación tendrá un hash diferente, porque presumiblemente tendrá una marca de tiempo y un mensaje diferentes, y definitivamente tendrá una confirmación principal diferente. Estos tres factores están integrados en el algoritmo hash de objetos git.


Hay son algunas de las razones es posible que desee cometer un vacío (que incorpora algunos de los comentarios):

  • Como "declarativa comprometerse", para añadir una narración o documentación (vía DavidNeiss) incluidos los datos posteriores al hecho sobre pasar pruebas o pelusa (a través del Robert Balicki).
  • Para probar git comandos sin generar cambios arbitrarios (a través de Vaelus).
  • Para volver a crear un repositorio desnudo eliminado utilizando 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 para el registro personal o las métricas (a través de BlueJ774). Sin embargo, piense dos veces: según su estructura de sucursal/fusió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 temporales de flujo de trabajo y dificultar la separación de las revisiones de código. cruft efímero.

Otras estrategias para añadir metadatos a un árbol cometer incluyen:

  • ramas separadas o etiquetas de peso ligero que siempre apuntan a una confirmación de un estado en particular (por ejemplo, "última aceptado cometer" o "puesta en escena actual cometen ").
  • Annotated Tags para una forma de registrar marca de tiempo, confirmador y mensaje, apuntando a una confirmación existente sin agregar una entrada en el árbol de confirmación.
  • git notes para asociar una nota mutable sobre una confirmación inmutable existente.
+1

Empecé a seguir el flujo de git [modelo de rama] (http://nvie.com/posts/a-successful-git-branching-model/). Cuando haces una rama 'dev' de' master' y luego una rama 'feat' inmediatamente de' dev', la rama 'feat' parece venir de la rama' master' ya que no hay commit distintivo en 'dev' rama de la cual proviene la rama 'hazaña '. Un commit vacío cuando primero haces la rama 'dev' ayuda a establecer la rama' dev' ya que es una rama indefinidamente duradera independiente de 'master'. En general, es útil cuando utiliza ramas como capas y crea dos capas a partir de una sola confirmación –

+0

Otra razón: si omite algo importante fuera de su mensaje de confirmación antes de presionar, no puede hacer 'commit --amend' si el control remoto no lo hace permitir empujar la fuerza. De esta forma, puede permitir que los desarrolladores vean un mensaje importante relacionado con la confirmación anterior. –

+0

Quiero hacer esto porque presioné una confirmación, pero olvidé mencionar algo en el mensaje de confirmación. Nuestros mensajes de compromiso están integrados con el seguimiento de problemas y el software de integración continua, y los contenidos del mensaje de confirmación afectan 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

19

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

git commit --allow-empty 
2

Tal vez como una alternativa más sensata, puede crear una etiqueta anotado (un llamado comprometerse con un mensaje). Vea la opción git tag -a.

0

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

4

vacío se comprometen con un mensaje

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

vacío se comprometen con un mensaje vacío

git commit --allow-empty --allow-empty-message 
Cuestiones relacionadas