Git Squash Todas los commits en una rama

Stewart Nguyen 6 febrero 2022
  1. Git Soft-Reset Cambios
  2. Agregar de nuevo los cambios
  3. Cometer
Git Squash Todas los commits en una rama

Este artículo dará instrucciones para aplastar todas los commits que se han realizado en una soel commit.

Supongamos que hemos realizado un montón de commits en una rama de características, ahora debemos limpiarla agrupando todas esos commits en esta rama en una soel commit. Git lo llama aplastamiento.

La idea para aplastar todas los commits es la siguiente.

  1. Restablezca todos los cambios con un restablecimiento parcial.
  2. Vuelva a agregar los cambios.
  3. Comprométete con un nuevo mensaje.

Git Soft-Reset Cambios

Un restablecimiento parcial deshará todas los commits sin eliminar los archivos recién agregados.

Para hacerlo, debemos encontrar el compromiso de origen donde se basa la rama de características, que generalmente es el nombre de la rama de origen, como main.

$ git log
commit a856ee456967a942ab379b27a4839962f88b92ce (HEAD -> feature/long-features)
Author: Cuong Nguyen
Date:   Mon Dec 27 20:53:18 2021 +0700

    Feature 2.3

commit 6f1599a18691906ed148dc40d2d290aaeceeaa5c
Author: Cuong Nguyen
Date:   Mon Dec 27 20:53:03 2021 +0700

    Subfeature 2

commit 94e35bae85f395c62fdaaa1aeaedbb11d2c94375
Author: Cuong Nguyen
Date:   Mon Dec 27 20:52:39 2021 +0700

    Subfeature 1

commit 9265e3bd97863fde0a13084f04163ceceff9a9d0 (grafted, tag: v1.0.0, branch-off-from-tag-v1.0.0)
Author: Cuong Nguyen
Date:   Sun Dec 19 19:33:07 2021 +0700

    Merge pull request #1 from stwarts/feature/shared-branch

En este ejemplo, descubrimos que la rama feature/long-features se extrae del compromiso SHA 9265e3bd97863fde0a13084f04163ceceff9a9d0 (o del nombre de la rama branch-off-from-tag-v1.0.0.

Para restablecer todas las modificaciones, utilice git reset --soft 9265e3bd97863fde0a13084f04163ceceff9a9d0 o git reset --soft branch-off-from-tag-v1.0.0.

$ git reset --soft 9265e3bd97863fde0a13084f04163ceceff9a9d0
$ git status
On branch feature/long-features
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   sub_feature_1.txt
	new file:   sub_feature_2.txt

La opción --soft especifica que git restablezca los commits y conserve los archivos nuevos.

Agregar de nuevo los cambios

git add -A es el comando a usar

La opción -A especifica que se añadirán todos los cambios.

Cometer

El paso final es usar git commit -m <message> para generar un nuevo commit.

$ git commit -m 'Squash 3 commits into 1'
[feature/long-features 8cc336c] Squash 3 commits into 1
 2 files changed, 2 insertions(+)
 create mode 100644 sub_feature_1.txt
 create mode 100644 sub_feature_2.txt
$ git log
commit 8cc336c6d1b2e6ed55470f99b040d6835ec655e5 (HEAD -> feature/long-features)
Author: Cuong Nguyen <cuong.nguyen@oivan.com>
Date:   Mon Dec 27 21:07:54 2021 +0700

    Squash 3 commits into 1

commit 9265e3bd97863fde0a13084f04163ceceff9a9d0 (grafted, tag: v1.0.0, branch-off-from-tag-v1.0.0)
Author: Nguyễn Phú Cường <npcuong.011308@gmail.com>
Date:   Sun Dec 19 19:33:07 2021 +0700

    Merge pull request #1 from stwarts/feature/shared-branch

Artículo relacionado - Git Squash