Posted on • Originally published atjtemporal.com on
Usando git stash e git stash pop
Mudar de branches durante o meio de trabalho é algo que acontece com certa frequência, por exemplo, para resolver um bug fazendo um“hotfix” em um outro branch enquanto você está desenvolvendo uma tarefa.
Existem algumas formas de interromper o trabalho, incluindo fazer commits. A minha forma favorita é usando os comandosgit stash
egit stash pop
. Muitas pessoas confundem o funcionamento desses dois comandos, então vamos resolver isso. 😉
O que é o stash
Stash pode ser visto com um empacotamento das mudanças atuais, que ainda não foram feitas o commit, que fica salva localmente no seu computador numa pilha. Cada pacote de mudanças é chamado de stash.
Quando um stash é criado, o seu diretório volta a umestado limpo, ou seja, sem mudanças nos arquivos que são acompanhados pelo Git. Isso também quer dizer que arquivos novos, que ainda não foram adicionados em um commit, não são adicionados em stash.
Cada stash recebe um “nome”, um índice, no formatostash@{<n>}
, onde"n"
se refere a um número correspondente a localização do stash na pilha de stashes. Esse número sempre se altera se mais stashes forem adicionados a pilha, o stash mais recente sempre é ostash@{0}
.
Pilhas, são um conceito comum em programação, e isso é importante para entender o comportamento do stash, pois, sem indicar o índice do stash, os comandos vão seguir a ordem LIFO (“last in, first out”), onde o último stash, ou seja, o stash mais recente, a ser adicionado na pilha é removido primeiro.
Guardando trabalho em progresso com stash
Então vamos dizer que você está trabalhando no branchtarefa
que corresponde a implementação de umafeature qualquer, mas agora você precisa voltar para o branchmain
e resolver um problema muito importante, por questões de simplicidade não vamos focar na resolução de problemas. Esse é o estado corrente do seu trabalho:
Agora você precisa salvar o trabalho que você já fez antes de retornar ao branchmain
. Para isso use o comando a seguir:
git stash
Esse comando é um atalho para o comando completo, ogit stash push
. Agora que o stash foi feito, você vai ver um resultado semelhante ao seguinte:
Você também pode ver o stash que acabou de fazer usando o comandogit stash list
para ver a lista de stashes existentes:
Note na imagem acima que a listagem de stashes sempre apresenta o índice do stash e uma mensagem. Agora que o trabalho está salvo, você pode trocar de branch tranquilamente e resolver o que precisar. Vale salientar que stashes não são amarrados a um branch, então você ainda vai poder ver o seu stash na lista mesmo depois de trocar de branches.
Voltando a trabalhar com o pop
Depois de terminar os ajustes no branchmain
, você finalmente pode voltar a trabalhar naquelafeature do branchtarefa
. Para tirar o stash da pilha e aplicar as mudanças que você guardou, use o comando a seguir:
git stash pop
Opop
vai remover o stash mais recente da pilha e aplicar as mudanças que ele contém, e você deve ver um resultado parecido com isso:
Agora você tem tudo que precisa pra continuar seu trabalho.
Como adicionar um arquivo novo à um stash
Como falei anteriormente, arquivos novos não entram num stash, isso acontece por que eles não possuem rastreamento anterior. Por exemplo, digamos que enquanto estivesse trabalhando no branchtarefa
, você, além de modificar o arquivoarquivo-tarefa.txt
, você tenha criado o arquivoarquivo-2.txt
, de deixando com o resultado a seguir no seu diretório de trabalho:
Se você tentar fazer o stash dessas alterações, vai ver que o arquivo novo continua lá firme e forte:
E aí você deve estar se perguntando, já que o stash não leva em consideração arquivos novos, como a gente burla esse comportamento? E a boa notícia é que existe um truque para adicionar arquivos novos à um stash: você precisa adicionar eles em staging!
Então adicione o arquivo novo comgit add
e você terá uma situação assim:
E se você fizer novamente ogit stash
verá que agora seu stash guarda também o arquivo novo e como resultado você tem o seu diretório de trabalho limpo:
E já que você sabe aplicar um stash e remover ele da lista com ogit stash pop
, você vai ver que o arquivo novo também volta do stash em staging:
E agora você já sabe usargit stash
. 🎉
GitFichas
Espero que esses comandos te ajudem a interromper o trabalho feito e voltar a trabalhar nas mudanças.
Top comments(0)
For further actions, you may consider blocking this person and/orreporting abuse