Artigo original: https://www.freecodecamp.org/news/git-stash-explained/

O Git tem uma área chamada stash (algo como 'esconderijo', em português), onde você pode armazenar temporariamente um instantâneo de suas alterações sem fazer o commit delas para o repositório. Ele é separado do diretório de trabalho, da área de staging e do próprio repositório.

Essa funcionalidade é útil quando você fez alterações a uma branch da qual você  não quer fazer o commit, mas precisa alternar para outra branch.

Guardar alterações no stash

Para salvar suas alterações no stash, execute o comando:

git stash save "mensagem opcional para você mesmo"

Isso salvará suas alterações e reverterá o diretório de trabalho ao que parecia anteriormente ao último commit. As alterações em stash estão disponíveis para qualquer branch daquele repositório.

Observe que as alterações que você deseja enviar ao stash precisam ser arquivos rastreados. Se criar um arquivo e tentar enviar suas alterações para o stash, você poderá ver o erro No local changes to save ("Sem alterações para salvar").

Ver as alterações em stash

Para ver o que está no seu stash, execute o comando:

git stash list

Isso retornará uma lista de seus instantâneos salvos no formato stash@{0}: BRANCH-PARA-A-QUAL-SÃO-AS-ALTERAÇÕES-EM-STASH: MESSAGE. A parte do stash@{0} é o nome do stash, enquanto o número entre chaves ({ }) é o índice daquele stash. Se você tiver vários conjuntos de alterações em stash, cada conjunto terá um índice diferente.

Se esquecer quais alterações foram feitas no stash, é possível ver um resumo delas com git stash show NOME-DO-STASH. Se quiser ver no layout de agrupamento de diferenças típico (com os + e - para as alterações linha a linha), você pode incluir a opção -p (de patch, em português, algo como um agrupamento). Aqui temos um exemplo:

git stash show -p stash@{0}

# Resultado de exemplo:
diff --git a/PathToFile/fileA b/PathToFile/fileA
index 2417dd9..b2c9092 100644
--- a/PathToFile/fileA
+++ b/PathToFile/fileA
@@ -1,4 +1,4 @@
-Como essa linha se parece na branch
+Como essa linha se parece com as alterações do stash

Obter as alterações do stash

Para obter as alterações do stash e aplicá-las à branch atual, na qual você está, você tem duas opções:

  1. git stash apply NOME-DO-STASH aplica as alterações e deixa uma cópia no stash
  2. git stash pop NOME-DO-STASH aplica as alterações e remove os arquivos do stash

Pode haver conflitos ao aplicar as mudanças. Você pode resolver os conflitos de modo semelhante ao que se faz com um merge (ver git merge para mais detalhes).

Excluir alterações do stash

Se quiser remover alterações do stash sem aplicá-las, execute o comando:

git stash drop NOME-DO-STASH

Para limpar todo o stash, execute o comando:

git stash clear