Salta el contingut
 

Merge squash

Autor: Joan Puigcerver Ibáñez

Correu electrònic: j.puigcerveribanez@edu.gva.es

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

merge --squash

L'opció --squash de la comanda git merge permet fusionar els canvis d'una branca en una altra en un únic commit.

De vegades, el treball en una branca pot generar molts commits (micro-commits) que no aporten informació rellevant. Amb aquesta opció, és possible fusionar tots aquests commits en un de sol, evitant la sobrecàrrega d'informació i contaminació de l'historial.

Aquesta opció és especialment útil en la fusió de branques de funcionalitat, que veurem en el següent bloc Estratègies de ramificació.

El funcionament de git merge --squash consisteix en aplicar tots els canvis de la branca especificada a l'Àrea de Preparació (Staging Area), però sense realitzar el commit, que caldrà fer manualment.

La sintaxi és la següent:

git merge --squash <branca>

Funcionament de git merge --squash

Figura 1. Funcionament de git merge --squash.

Preparació repositori
setup_squash.sh
#!/bin/bash

# Elimina els repositori si existeix
if [ -d ~/git_squash ]; then
    rm -rf ~/git_squash
fi

mkdir -p ~/git_squash
cd ~/git_squash
git init
git branch -m main
echo "# Git merge --squash" > README.md
git add README.md
git commit -m "Commit inicial"
git checkout -b canvis
echo "- Canvi A" >> README.md
git commit -a -m "Canvi A"
echo "- Canvi B" >> README.md
git commit -a -m "Canvi B"
echo "- Canvi C" >> README.md
git commit -a -m "Canvi C"
git lga
jpuigcerver@fp:~ $ mkdir -p ~/git_squash
jpuigcerver@fp:~ $ cd ~/git_squash
jpuigcerver@fp:~/git_squash $ git init
Initialized empty Git repository in ~/git_squash/.git/
jpuigcerver@fp:~/git_squash (main) $ git branch -m main
jpuigcerver@fp:~/git_squash (main) $ echo "# Git merge --squash" > README.md
jpuigcerver@fp:~/git_squash (main) $ git add README.md
jpuigcerver@fp:~/git_squash (main) $ git commit -m "Commit inicial"
[main (root-commit) 863c0b2] Commit inicial
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
jpuigcerver@fp:~/git_squash (main) $ git checkout -b canvis
Switched to a new branch 'canvis'
jpuigcerver@fp:~/git_squash (canvis) $ echo "- Canvi A" >> README.md
jpuigcerver@fp:~/git_squash (canvis) $ git commit -a -m "Canvi A"
[canvis b460f08] Canvi A
 1 file changed, 1 insertion(+)
jpuigcerver@fp:~/git_squash (canvis) $ echo "- Canvi B" >> README.md
jpuigcerver@fp:~/git_squash (canvis) $ git commit -a -m "Canvi B"
[canvis 58d9407] Canvi B
 1 file changed, 1 insertion(+)
jpuigcerver@fp:~/git_squash (canvis) $ echo "- Canvi C" >> README.md
jpuigcerver@fp:~/git_squash (canvis) $ git commit -a -m "Canvi C"
[canvis 824cb01] Canvi C
 1 file changed, 1 insertion(+)
jpuigcerver@fp:~/git_squash (canvis) $ git lga
* 824cb01 - (0 seconds ago) Canvi C - Joan Puigcerver (HEAD -> canvis)
* 58d9407 - (0 seconds ago) Canvi B - Joan Puigcerver
* b460f08 - (0 seconds ago) Canvi A - Joan Puigcerver
* 863c0b2 - (0 seconds ago) Commit inicial - Joan Puigcerver (main)
Exemple: git merge --squash

S'han fusionat tots els canvis de la branca canvis a la branca principal main en un únic commit.

jpuigcerver@fp:~/git_squash (canvis) $ git checkout main
Switched to branch 'main'
jpuigcerver@fp:~/git_squash (main) $ git merge --squash canvis
Updating 863c0b2..824cb01
Fast-forward
Squash commit -- not updating HEAD
 README.md | 3 +++
 1 file changed, 3 insertions(+)
jpuigcerver@fp:~/git_squash (main) $ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    modified:   README.md

jpuigcerver@fp:~/git_squash (main) $ git commit -m "Canvis A, B i C"
[main 00b7e27] Canvis A, B i C
 1 file changed, 3 insertions(+)
jpuigcerver@fp:~/git_squash (main) $ git lga
* 824cb01 - (0 seconds ago) Canvi C - Joan Puigcerver (canvis)
* 58d9407 - (0 seconds ago) Canvi B - Joan Puigcerver
* b460f08 - (0 seconds ago) Canvi A - Joan Puigcerver
| * 00b7e27 - (0 seconds ago) Canvis A, B i C - Joan Puigcerver (HEAD -> main)
|/  
* 863c0b2 - (0 seconds ago) Commit inicial - Joan Puigcerver

Comentaris