2010-08-31 8 views
11

Mi flujo de trabajo habitual con git es crear una nueva rama de funciones, trabajar con confirmaciones frecuentes y luego volver a fusionarme en la rama de desarrollo cuando la característica funciona y/o es estable.Conflictos de combinación arruinan mi mensaje de confirmación mientras aplasta commits

Normalmente, cuando hago git merge --squash feature-branch, recibo un bonito mensaje de "confirmación aplastada de lo siguiente" que se completa automáticamente con todos los mensajes de confirmación de la rama de características.

Sin embargo, si hay conflictos de combinación (digamos que terminé y fusioné otra característica mientras trabajo en esta), parece que pierdo todos mis mensajes de confirmación de la rama. El mensaje de confirmación llenado automáticamente rellena los conflictos, pero no los mensajes de confirmación. ¿A dónde fueron mis mensajes de compromiso? ¿Puedo recuperarlos?

+0

Por qué calabaza en absoluto? Podrías usar 'rebase --interactive' para limpiar, si consideras tus confirmaciones como demasiado frecuentes y desordenadas, entonces haz una fusión normal, de esa manera no perderás el historial. – Cascabel

Respuesta

4

Esto no responde su pregunta directamente, pero debería poder evitar el conflicto en primer lugar.

considerar hacer una

git rebase master topic 

antes de realizar la combinación. La sección DESCTIPCIÓN de esta página http://git-scm.com/docs/git-rebase debería ser útil. Esto también puede evitar la necesidad de la calabaza, ya que una base de datos interactiva le permitiría aplastar las confirmaciones que elija.

EDIT: Ver también: In git, what is the difference between merge --squash and rebase?

+0

Definitivamente no necesitarías una fusión squash en ese punto; sería un avance rápido. – Cascabel

1

Nada está realmente perdido con git. La lista de las confirmaciones en la rama de la característica puede ser obtenida usando:

git cherry feature-branch 

Después, simplemente tubería que esto git cat-file:

git cherry feature-branch | cut -f2 -d' ' | git cat-file --batch 

es necesario limpiar arriba la salida embargo. No sé cómo automatizarlo mejor.

7

Sí, se puede obtener la calabaza cometer mensaje de vuelta. Se almacena en .git/SQUASH_MSG.

Se puede utilizar como una plantilla con el siguiente comando:

git commit -t .git/SQUASH_MSG 
+2

Por alguna razón, esto no funcionó para mí directamente, pero gracias por el puntero a '.git/SQUASH_MSG' :) –

+0

Ejecuté el comando' git commit --file .git/SQUASH_MSG' y se creó el listado del mensaje de confirmación todos los commits dentro del commit aplastado. – Abdull

Cuestiones relacionadas