Git Squash Todas las confirmaciones
En la vida de cada desarrollador, la palabra squash
se usa con frecuencia al trabajar con el sistema de control distribuido Git. Esta función en Git es una opción conveniente y los desarrolladores la usan a menudo para un flujo de trabajo ordenado en un equipo de desarrolladores.
En este bloque, hablaremos en detalle sobre la característica principal de Git, es decir, Squashing
. Además, el proceso de aplastamiento y por qué lo necesitamos mientras trabajamos con el equipo de desarrolladores.
Aplastamiento de Git
Primero, necesitamos saber qué es el aplastamiento. Generalmente, aplastar es mezclar algo con todas las cosas disponibles.
En Git, el término squash
se usa para combinar varias confirmaciones en una confirmación usando la línea de comando. Y esta característica mantiene las cosas en el orden correcto como primero en entrar, primero en salir.
Expliquemos el orden de aplastamiento y secuenciación en las confirmaciones con un ejemplo a continuación.
A ◄───── B ◄──── C ◄───── D
After Squashing commits B, C, and D:
A ◄───── E
Commit E includes the commits B, C, and D changes.
Digamos que fusionaremos todos los compromisos en un nuevo commit E
. Ahora commit E
comprende los cambios realizados en commits B, C y D
.
El aplastamiento se hace especialmente para mantener ordenado el gráfico de rama en un ciclo de vida más largo.
Cuando trabajamos con una nueva función en una aplicación, es obvio que hacemos un par de confirmaciones antes de obtener el resultado deseado. Eso puede ser algunas correcciones de los errores informados por el equipo de control de calidad o algunas pruebas.
Después de aplicar estas funciones, hemos recopilado algunas confirmaciones no esenciales que hacen que nuestra rama se vea desordenada con las confirmaciones. Para este escenario, utilizaremos el aplastamiento en esa rama del repositorio.
Nos ayudará a combinar estas confirmaciones redundantes en una sola.
El punto principal a recordar aquí es que squash
no es un comando de Git. Sin embargo, es una operación esencial de Git.
Si ejecutamos git squash
, nos dará error, ya que solo es una operación y se puede ejecutar a través del comando interactive rebase
de Git.
Use Git Interactive Rebase para aplastar todas las confirmaciones
Con la característica de rebase interactivo
de Git, podemos aplastar manualmente nuestras confirmaciones en cualquier momento que queramos en cualquier punto del ciclo de vida de la rama. Comencemos ejecutando el siguiente comando con el alias slog
, que nos ayudará a ver el registro de confirmación compacto.
git config --global alias.slog = log --graph --all --topo-order --pretty='format:%h %ai %s%d (%an)'
Producción :
$ git slog
* ac1sd5f 2022-02-11 11:09:15 +0600 Commit D (HEAD -> master) (test)
* 5dasq6f 2022-02-11 11:09:02 +0600 Commit C (test)
* 5asa04d 2022-02-11 11:09:02 +0600 Commit B (test)
* c40as62 2022-02-11 11:10:56 +0600 Commit A (test)
* 29awqc5 2022-02-11 11:10:33 +0600 BugFix #1 (test)
* 3asafeb 2022-02-11 11:10:19 +v Feature1 implemented (test)
* cbas10d 2022-02-11 11:26:19 +0600 Init commit (test)
Aquí, el comando Git Interactive Rebase
también mostrará todas las confirmaciones relevantes en el editor predeterminado con el orden de secuencia. Aquí, queremos aplastar estas confirmaciones, controlarlas y guardarlas en el editor usando el comando Git.
El siguiente es el comando utilizado para aplastar las últimas confirmaciones X
:
git rebase -i HEAD~[X]Copy
Como queremos aplastar las últimas 4 confirmaciones, mencionaremos 4 en lugar de X
, como en el comando anterior.
git rebase -i HEAD~4Copy
Cuando decimos últimas X confirmaciones
, significa las últimas x
confirmaciones desde la cabeza
hasta la parte inferior.
Como resultado de la reorganización interactiva, se inicia el editor predeterminado de Git y comienza a aplastar las confirmaciones que queríamos que estuvieran en una sola confirmación. Los commits listados con el comando pick
son aquellos que queremos aplastar.
Ahora, cambiaremos la selección de comandos de las confirmaciones a s
o squash
, para que estas confirmaciones sean aplastadas.
Después de eso, guardaremos nuestros cambios y cerraremos el editor. La operación git rebase
se realizará según nuestras instrucciones.
$ git rebase -i HEAD~4
[detached HEAD fa29cd5] Commit A
Date: Tue Sep 04 11:10:11 2022 +0600
1 file changed, 1 insertion(+), 1 deletion(-)
Successfully rebased and updated refs/heads/master.
Rebase se realiza con éxito. Para nuestra satisfacción, podemos echar un vistazo a nuestro registro de confirmación ejecutando una vez más el comando git slog
de la siguiente manera:
$ git slog
* f9SAEd5 2022-05-22 4:09:02 +0600 Commit A (HEAD -> master) (test)
* 29aS6c5 2022-05-22 4:09:02 +0600 BugFix #1 (test)
* 34faseb 2022-05-22 4:09:02 +0600 Feature1 implemented (test)
* cbadw0d 2022-05-22 4:09:02 +0600 Init commit (test)
Como podemos ver en la ventana de resultados anterior, finalmente, las últimas 4 confirmaciones se han agrupado en una, y ha sido fácil para los desarrolladores obtener las cuatro confirmaciones diferentes para trabajar en una única confirmación de función.
Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.
LinkedIn