Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Jessica Temporal
Jessica Temporal

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:

imagem do terminal mostrando que há modificações em um arquivo

Agora você precisa salvar o trabalho que você já fez antes de retornar ao branchmain. Para isso use o comando a seguir:

git stash
Enter fullscreen modeExit fullscreen mode

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:

imagem mostrando o resultado do git stash

Você também pode ver o stash que acabou de fazer usando o comandogit stash list para ver a lista de stashes existentes:

imagem mostrando o resultado do git stash list

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
Enter fullscreen modeExit fullscreen mode

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:

imagem mostrando o resultado do comando git stash pop

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:

resultado do git status mostrando um arquivo modificado e um arquivo novo

Se você tentar fazer o stash dessas alterações, vai ver que o arquivo novo continua lá firme e forte:

resultado dos comandos git stash e git status mostrando que o arquivo novo não entrou no stash

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:

imagem mostrando o ambiente de staging com o arquivo novo

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:

imagem mostrando o resultado de fazer o stash com o arquivo novo em staging

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:

imagem mostrando o resultado de git stash pop depois do ultimo stash

E agora você já sabe usargit stash. 🎉

GitFichas


GitFicha #041: git stash push


GitFicha #043: git stash pop


GitFicha #044: git stash pop

Espero que esses comandos te ajudem a interromper o trabalho feito e voltar a trabalhar nas mudanças.

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

DevRel 🥑 • Author • 🎙Podcaster Pizza De Dados • Creator of gitfichas.com • GitHub ⭐️ • cross-stitcher & knitter • 🇧🇷 & 🇨🇦 • she/her
  • Location
    Canada
  • Pronouns
    she/her
  • Work
    Auth0 by Okta
  • Joined

More fromJessica Temporal

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp