Git stash: criando um backup das alterações atuais

Ao trabalhar em um projeto no Git com diversas branches e com um time desenvolvendo em conjunto, provavelmente você já se deparou com um momento em que você precisava fazer alguma outra coisa e não queria perder o que já tinha feito e nem fazer um commit com aquele código incompleto. Você poderia fazer um commit e depois sobrescrevê-lo, mas essa não é a melhor e nem a única opção. Para isso, existe o git stash. 

Esse comando é responsável por fazer um backup dessas alterações que ainda não estão finalizadas, que não precisam ou que não podem ser commitadas no momento. Nesse post, vamos conhecer mais sobre as possibilidades que temos com o git stash e como usá-lo da melhor forma. 

Confira os tópicos apresentados no texto:

Boa leitura!

O que é o Git stash e para que serve? 

O Git stash arquiva alterações não commitadas do seu local de trabalho, ou seja, ele volta para o estado do seu último commit guardando as alterações adicionais que você tinha feito. Fazendo uma analogia, é quase como se fizesse um backup das modificações dos seus arquivos.

Existem algumas situações bem úteis para utilizar o comando, algumas delas listadas abaixo:

  • Você está trabalhando em algumas modificações e precisa fazer um teste desconsiderando o que você fez, mas sem perder tudo.
  • Você começou a desenvolver na branch errada e não quer perder as alterações.
  • Decidiu que vai criar uma nova branch a partir dessas modificações e não mais vai trabalhar na branch que está.
  • Testará uma nova abordagem para o mesmo problema sem perder a versão que estava trabalhando e também sem precisar fazer um commit.
  • Precisará fazer uma modificação em um outro branch ou até fazer um conserto rápido, mas não quer perder as alterações que fez até agora e nem fazer um commit. 

Em todas essas situações você pode utilizar o git stash para ajudar você. 

O que acontece na prática é que o Git cria uma branch temporária com todas as alterações que você tinha feito, volta para a branch que você estava trabalhando e desfaz tudo que não estava commitado. Ao longo desse post, vamos explicar melhor como fazer para recuperar essas alterações, como criar novas branches a partir delas, entre outras opções. 

Como usar o Git stash? O passo a passo!

Como fazer um stash no trabalho?

Imagine um cenário em que você está trabalhando no seu projeto enquanto altera alguns arquivos e subitamente precisa trocar de branch, mas não quer commitar ou apagar as alterações feitas. 

Para resolver isso, bastaria executar o comando git stash. Se você perceber na imagem abaixo, antes do stash, existe um arquivo modificado ao rodar o comando git status, e, após, a branch está totalmente limpa. Nesse momento, você pode trabalhar neste ou em outras branches tranquilamente, pois suas alterações estarão guardadas na pilha do stash.

Fazendo um stash com Git stash

Listando os seus stashes: git stash list

Você pode fazer esses “backups” novamente, ou seja, pode usar o comando stash mais de uma vez. Essas branches temporárias vão sendo armazenadas em uma pilha. É possível ver todos os stashs guardados rodando o comando git stash list. 

Pilha de armazenamento git stash

Reaplicando as alterações do último stash: git stash pop

Para restaurar as modificações do último stash, você precisa saber que ele funciona como uma pilha. Isso significa que toda vez que algo é inserido na pilha do stash, é inserido no topo, e toda vez que é removido (pop) é feito do topo também. 

Então, para removermos e aplicarmos o elemento do topo (stash@{0}), basta executar o comando git stash pop.

Executando git stash pop

Nesse comando, você pode perceber que a referência ao stash@{0} da pilha foi deletada. Mas também é possível aplicar essas alterações sem deletar essa referência. Isso é útil para quando você precisa usar essas alterações mais de uma vez. Então, para isso basta usar o comando git stash apply.

Aplicando alterações sem deletar referência

Fazendo stashes em arquivos específicos: git stash -p

Algumas vezes você não quer guardar todas as alterações no stash, somente de alguns arquivos ou algumas partes do código. Para isso, você pode usar a opção -p, e você poderá decidir em cada parte do código o que fazer.

Decidindo que parte do código utilizar com git stash

Após aparecer as alterações, uma lista de comandos aparecerá com o que você pode usar. Vamos explicar os mais comuns:

ComandoO que significa?
yfazer stash dessa parte
nnão fazer stash dessa parte
qsair, não faz o stash e não vê os próximos
/pesquisar um parte por regex
?ajuda, mostra o que todos os comandos significam
squebrar esse código em partes menores

Fazendo stashing de arquivos não rastreados: git stash -u

O stash não funciona em dois tipos de situações:

  • arquivos ignorados, ou seja, que foram adicionados ao .gitignore
  • um novo arquivo, porque esse arquivo ainda não foi trackeado. Ou seja, ainda não executamos o git add nele. Depois do git add, ele passa a ser trackeado. 

Nesses casos, caso você queira fazer stash desses arquivos, você precisa usar a opção -u, que adicionará os arquivos untracked

Stashing de arquivos não rastreados

Visualize as diferenças entre stashs: git stash show

Você consegue ver um resumo do que tem de alterações no seu último stash usando o comando git stash show

Resumo de alterações stash

Ou, você também pode ver as alterações completas e mais detalhadas do seu último stash passando a opção -p.

Opção -p para visualizar alterações detalhadas

Criando uma ramificação do stash: git stash branch

Você pode criar um novo branch a partir de um dos seus stashes, para isso basta usar a estrutura:

git stash branch <nome-do-branch> <referência-do-stash>

Criando uma nova ramificação git stash

Limpar ou excluir seu stash: git stash drop e git stash clear

Quando você não precisar mais utilizar um stash específico, você pode usar o git stash drop passando a referência de qual stash deseja deletar.

Limpando e excluindo stash

Ou você também pode apagar todos os seus stashes usando o comando git stash clear.

Quanto mais entramos no universo Git, mais podemos ver o quanto ele é poderoso e complexo. Existem muitos comandos que podem aumentar ainda mais a nossa produtividade e facilitar muito alguns problemas que enfrentamos no dia a dia. O git stash é um exemplo desses comandos. 

Com ele, podemos navegar de forma ainda mais simples entre branches e fazermos cada vez mais testes sem perdermos todo o nosso código ou ficar poluindo o nosso histórico de commits. Por isso, é muito importante você continuar estudando mais comandos Git!
Não pare por aqui! Leia mais sobre Git aprendendo sobre o comando Git Clone!