La reserva de canvis o stash en Git es un magatzem que permet
guardar temporalment els canvis que encara no es volen confirmar (commit).
Aquesta funció és útil si heu de realitzar alguna acció de Git que, d'altra manera,
vos faria perdre els canvis que heu realitzat al directori de treball.
Canviar de branca.
Incorporar canvis d'una altra branca (merge, rebase o pull).
La reserva de canvis permet guardar aquests canvis temporalment i recuperar-los
posteriorment quan siga necessari.
Preparació repositori
Inicialitzem un repositori amb canvis en el fitxer README.md
i una branca addicional feature/documentacio on s'han fet canvis al mateix fitxer.
La comanda git stash permet guardar els canvis que s'han realitzat al directori de treball.
gitstash[-m<missatge>]
Aquesta comanda inclourà els canvis a una pila de canvis:
Els nous canvis es guardaran a la primera posició del stash com a stash@{0}.
La resta de canvis es desplaçaran una posició a la dreta, incrementant l'índex en 1.
A més, es pot afegir un missatge al stash per identificar millor els canvis guardats.
Exemple: Crear una reserva de canvis
En aquest exemple, es guardaran els canvis realitzats al fitxer README.md al stash.
Com que canviar a la branca feature/documentacio sobreescriuria el contingut de README.md,
Git no ens ho permet i ens recomana reservar els canvis o confirmar-los.
jpuigcerver@fp:~/git_stash(main)$echo"">>README.md
jpuigcerver@fp:~/git_stash(main)$echo"L'ordre git stash permet reservar els canvis temporalment per a poder fer altres tasques.">>README.md
jpuigcerver@fp:~/git_stash(main)$gitstatus
On branch mainChanges not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory)modified: README.mdno changes added to commit (use "git add" and/or "git commit -a")jpuigcerver@fp:~/git_stash(main)$gitcheckoutfeature/documentacio
error: Your local changes to the following files would be overwritten by checkout: README.mdPlease commit your changes or stash them before you switch branches.Abortingjpuigcerver@fp:~/git_stash(main)$gitstash-m"Text git stash"Saved working directory and index state On main: Text git stashjpuigcerver@fp:~/git_stash(main)$gitstatus
On branch mainnothing to commit, working tree cleanjpuigcerver@fp:~/git_stash(main)$gitcheckoutfeature/documentacio
Switched to branch 'feature/documentacio'jpuigcerver@fp:~/git_stash(feature/documentacio)$gitcheckoutmain
Switched to branch 'main'
Els canvis guardats en una reserva de canvis poden ser consultats mitjançant
l'acció show. Aquesta acció mostrarà els fitxers que s'han canviat.
gitstashshow[-p][index]
Addicionalment, podem mostrar els canvis (diff) mitjançant l'opció -p.
També es pot indicar l'índex del stash que es vol consultar. Si no s'indica,
mostrarà per defecte el stash@{0}.
Exemple: Mostrar els canvis d'una reserva
jpuigcerver@fp:~/git_stash(main)$gitstashshow
README.md | 2 ++ 1 file changed, 2 insertions(+)jpuigcerver@fp:~/git_stash(main)$gitstashshow-p
diff --git a/README.md b/README.mdindex dd979cc..a0acb65 100644--- a/README.md+++ b/README.md@@ -1,2 +1,4 @@# Reserva de canvis
Repositori d'exemple amb reserva de canvis
++L'ordre git stash permet reservar els canvis temporalment per a poder fer altres tasques.
Els canvis reservats poden recuperar-se mitjançant l'acció apply.
gitstashapply[index]
Aquesta acció aplicarà els canvis guardats al directori de treball.
També es pot indicar l'índex del stash que es vol aplicar. Si no s'indica,
s'aplicarà per defecte el stash@{0}.
Si a més, volem esborrar la reserva de canvis, podem utilitzar l'opció pop.
gitstashpop[index]
Exemple: Recuperar els canvis
jpuigcerver@fp:~/git_stash(main)$gitstatus
On branch mainnothing to commit, working tree cleanjpuigcerver@fp:~/git_stash(main)$gitstashapply
On branch mainChanges not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory)modified: README.mdno changes added to commit (use "git add" and/or "git commit -a")jpuigcerver@fp:~/git_stash(main)$gitdiff
diff --git a/README.md b/README.mdindex dd979cc..a0acb65 100644--- a/README.md+++ b/README.md@@ -1,2 +1,4 @@# Reserva de canvis
Repositori d'exemple amb reserva de canvis
++L'ordre git stash permet reservar els canvis temporalment per a poder fer altres tasques.jpuigcerver@fp:~/git_stash(main)$gitstashlist
stash@{0}: On main: Text git stash
Una reserva de canvis pot ser eliminada de la pila de canvis mitjançant
l'acció drop.
gitstashdrop[index]
També es pot indicar l'índex del stash que es vol descartar. Si no s'indica,
es descartarà per defecte el stash@{0}.
Exemple: Descartar els canvis
jpuigcerver@fp:~/git_stash(main)$gitstashlist
stash@{0}: On main: Text git stashjpuigcerver@fp:~/git_stash(main)$gitstashdrop
Dropped refs/stash@{0} (6454e0cf44cfd7835b14d1baec30e4cdf71a8640)jpuigcerver@fp:~/git_stash(main)$gitstashlist