Estoy tratando de aplastar una variedad de confirmaciones: HEAD a HEAD ~ 3. ¿Existe una forma rápida de hacer esto, o necesito usar rebase --interactive?
git
interactive
rebase
squash
Phillip
fuente
fuente
Respuestas:
Asegúrese de que su árbol de trabajo esté limpio, luego
fuente
git reset --soft HEAD~3 && git commit -m "my message"
git config alias.mysquash '!f(){ git reset --soft HEAD~$1 && git commit ${2:+-m "$2"}; };f'
.git mysquash 3 'some message'
funcionará, pero también lo modifiqué, porgit musquash 3
lo que omitiré la marca -m por completo para que obtenga lagit commit
interfaz de usuario interactiva en ese caso.Personalmente, me gusta la solución de Wilhelmtell :
Sin embargo, hice un alias con alguna comprobación de errores para que puedas hacer esto:
Recomiendo configurar alias que realmente ejecuten scripts para que sea más fácil (a) codificar sus scripts y (b) hacer un trabajo más complejo con la verificación de errores. A continuación se muestra un script que hace el trabajo de squash y, a continuación, hay un script para configurar sus alias de git.
Script para aplastar (squash.sh)
Luego, para conectar ese script squash.sh a un alias de git, cree otro script para configurar sus alias de git así ( create_aliases.command o create_aliases.sh ):
fuente
$PATH
namedgit-squash.sh
y automáticamente se le asignará un aliasgit squash
. No cambié tu respuesta, por si acaso hay una razón para usar elcreate-aiases.sh
guión que no conozco.Para agregar a la respuesta de wilhelmtell, me resulta conveniente realizar un restablecimiento parcial
HEAD~2
y luego enmendar la confirmación deHEAD~3
:Esto fusionará todas las confirmaciones con la
HEAD~3
confirmación y usará su mensaje de confirmación. Asegúrese de comenzar con un árbol de trabajo limpio.fuente
Solía:
Funcionó bastante bien. Simplemente no intente tener un registro de confirmación con una línea que comience con "elegir" :)
fuente
Use el siguiente comando para aplastar las últimas 4 confirmaciones dentro de la última confirmación:
Con el alias:
De https://github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig
fuente
Aquí hay una línea para aplastar las últimas 2 confirmaciones. En este ejemplo, se conservará el mensaje de la penúltima confirmación. Puede cambiar el mensaje como desee.
Este comando será muy útil si crea un alias para este comando y usa el alias en su lugar.
fuente
Para aplastar todo desde que la rama se bifurcó del maestro:
fuente
--reedit-message=HEAD
usará el mensaje de la última confirmación que no es parte del aplastamiento . Es probable que este no sea el que desea. Para que se incluya el mensaje de la primera confirmación , (1) reempláceloHEAD
con el hash de la confirmación de la que desea que se incluya el mensaje, o (2) salte a la primera confirmación que se incluirá ygit commit --amend --reedit-message=HEAD
. Esto es lo que hace la respuesta armoniosa.Puedes acercarte bastante
Esto supone que está en el maestro con un historial lineal. No es del todo un squash porque descarta las confirmaciones intermedias. Debería enmendar el nuevo HEAD para modificar el mensaje de confirmación.
fuente
HEAD~4
como padre.