git git-extensions squash fixup difference

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



git-extensions difference (4)

Llevo usando extensiones de Git hace 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

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 Git / Git Extentions ? Se ven algo así como ... "similar" a mí:


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".


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 mensaje de confirmación de pick o reword .

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


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 comandos y encontré este post útil

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.

No sé qué hace específicamente con las extensiones de Git, pero git rebase tiene una opción para aplastar o git rebase automáticamente los commits 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, la operación de squash le pedirá que combine los mensajes de la confirmación original y squash, mientras que la operación de fixup mantendrá el mensaje original y descartará el mensaje de la confirmación de reparación.