Pregunta ¿Cuál es la diferencia entre "squash" y "fixup" en la extensión de Git / Git?


He estado usando Extensiones de Git por un tiempo (¡es increíble!) pero no he encontrado una respuesta simple para lo siguiente:

A veces, al escribir un mensaje de confirmación, se crea un error tipográfico. Mi amigo me mostró cómo solucionarlo de la siguiente manera (en Git Extentions):

Haga clic con el botón derecho en la confirmación> Avanzado> Confirmación de corrección

enter image description here

Luego, simplemente marque la casilla "Modificar" y vuelva a escribir mi mensaje y ¡listo! Mi mensaje de compromiso es fijo.

Sin embargo, esta otra opción "Squash commit" ... siempre me he preguntado qué hace?

Mi pregunta es:

¿Alguien simplemente me explicaría cuál es la diferencia exacta entre Squash commit y Fixup commit en Extensiones Git / Git? Se ven como ... "similar" a mi: enter image description here enter image description here


73
2018-05-26 10:01


origen


Respuestas:


No sé qué hace Git Extensions específicamente con eso, pero git rebase tiene una opción para aplastar automáticamente o corregir compromisos con squash! o correccion! prefijos, respectivamente:

   --autosquash, --no-autosquash
       When the commit log message begins with "squash! ..." (or "fixup!
       ..."), and there is a commit whose title begins with the same ...,
       automatically modify the todo list of rebase -i so that the commit
       marked for squashing comes right after the commit to be modified,
       and change the action of the moved commit from pick to squash (or
       fixup).

La diferencia entre squash y fixup es que durante la rebase, el squash operación le pedirá que combine los mensajes de la confirmación original y de squash, mientras que fixup la operación mantendrá el mensaje original y descartará el mensaje del compromiso de reparación.


101
2018-05-26 11:11



En pocas palabras, al volver a establecer una serie de confirmaciones, cada confirmación marcada como squash, le da la oportunidad de usar su mensaje como parte de un pick o reword cometer mensaje

Cuando usas fixup el mensaje de esa confirmación se descarta.


46
2017-07-11 14:20



De git-rebase doc:

Si quiere doblar dos o más commits en uno, reemplace el comando "pick" por el segundo y subsiguientes commits con "squash" o "fixup". Si las confirmaciones tienen autores diferentes, la confirmación plegada se atribuirá al autor de la primera confirmación. El mensaje de confirmación sugerido para la confirmación plegada es la concatenación de los mensajes de confirmación del primer compromiso y de aquellos con el comando "squash", pero omite los mensajes de confirmación de confirmaciones con el comando "fixup".


10
2018-03-12 13:48



He jugado con las extensiones de git y no pude lograr aplastar muchos commit en uno. Para hacer eso, tuve que recurrir a la línea de comando y encontré esta publicación servicial

git rebase -i Head~2

Esta es una base de datos interactiva, y tenga en cuenta lo siguiente:

  • ~ 2 aquí se refiere a la cantidad de compromisos que desea involucrar en esta operación, incluida la cabeza actual
  • Debe editar la ventana de edición interactiva subsiguiente, dejar el primer elemento como "seleccionar" y reemplazar las líneas siguientes con "squash". Las instrucciones en el enlace de arriba son mucho más claras si esto es opaco.

1
2018-05-08 17:15