Git Stash: Conhecendo e utilizando um dos comandos mais práticos para o versionamento de seu código
A utilização do Git para controlar e versionar códigos na programação é algo tido atualmente como sendo fundamental e até indispensável nos projetos; a sua utilização permite que diferentes pessoas possam trabalhar no mesmo arquivo, obter um histórico de modificações e muitas outras funcionalidades.
A ferramenta Git dispõe de vários comandos; porém um comando não tão conhecido e utilizado mas que pode ser aquela “mão na roda”, para o desenvolvedor é o git stash.
Compartilho aqui um pouco do meu conhecimento aprimorado na semana passada sobre o tema.
O que tem de tão especial no git stash
?
No seu natural fluxo de desenvolvimento versionado você já deve ter se debatido com algumas das seguintes situações:
- Começar um desenvolvimento de tarefa na branch errada;
- Precisar atualizar a branch após já ter modificado alguns arquivos;
- Desejar criar uma branch a partir das suas modificações em arquivos;
- Versionar códigos incompletos POC’s* (se for o caso), sem precisar realizar um commit;
- Testar o funcionamento da aplicação temporariamente desconsiderando os arquivos modificados e sem perder o que já foi feito;
- Mudar modificações não commitadas de branch sem precisar commitar e consequentemente realizar um merge e/ou PR(pull request);
- Dentre outras situações verbosas que envolvam commits e PR.
Pois bem, a utilização do git stash
permite a você o controle sobre essas e outras situações, tornando mais prático e ágil o seu desenvolvimento de código.
* Prova de Conceito (Proof of Concept)
O que faz o Git Stash ?
Excelente, você deve estar empolgado e querendo aprender a utilizar essa funcionalidade do Git, mas o que de fato faz o git stash
?
Falando de forma leiga: Ele cria um backup das modificações de seus arquivos.
De forma mais detalhada: Considerando que você tenha arquivos pendentes para commitar, ao utilizar o comando git stash
no seu terminal, o Git vai criar uma branch temporária contendo a versão atual do seu projeto e após isso vai desfazer essas modificações feitas nos arquivos da sua branch atual, ainda não ficou claro ? Tudo bem, veja na prática um exemplo da situação descrita na prática:
$ git status
modified: index.html$ git stash
Saved working directory and index state \ "WIP on master: 049d078 added the index file" HEAD is now at 049d078 added the index file$ git status
On branch master nothing to commit, working directory clean
Observe que o arquivo index.html já não consta como sendo modificado.
O que aconteceu com as modificações que sumiram ?
Certamente você deva estar se questionando onde foram parar e como vai poder obter novamente as modificações;
Os seus arquivos estão seguros, calma; pequeno gafanhoto !
O Git inteligentemente cria aquela ramificação que foi citada para você com as alterações que tinhas realizado e para recuperar basta usar o comando git stash apply
e dessa forma, todos os arquivos que você modificou no momento do apply vão ser restaurado, exatamente como você deixou.
Realizei vários stash e agora ?
Caso você tenha realizado mais de um stash, você poderá escolher de uma lista qual deseja restaurar; partindo do básico, esse é o procedimento que você vai realizar:
- Você poderá a qualquer momento consultar todos os stash’s criados com o comando:
git stash list
, obtendo um retorno semelhante ao exemplo:
$git stash list
stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: eb65635... Email Adjust
A lista exibida estará organizada por data, em formato de pilha (no topo os stash’s mais recentes).
- Feito isso você pode escolher exatamente qual stash deseja restaurar e para isso basta utilizar o seguinte comando: git stash apply @{id}
, sendo id o número identificador/posição.
“Quero saber é dos macetes agora !”
Bem, após você ter lido o artigo até aqui você será capaz de criar inúmeras situações ao seu favor. Lembra daquela listinha citada no inicio do artigo repleta de situações na qual você certamente já deve ter entrado ? Pois bem, vamos agora exemplificar duas das situações !
- Começou o desenvolvimento de tarefa na branch errada?
“Quem nunca? hahaha”… Mas não precisa ficar preocupado, você não vai precisar desfazer todas as suas modificações ou fazer um backup manual desses arquivos; utilize ogit stash
; um truque é que ele permite migrar de branchs as modificações realizadas.
Dessa forma você poderá realizar ogit stash
em uma branch e o restaurar com ogit stash apply
em outra branch. - Desejar criar uma branch a partir das suas modificações sem commitar ?
Simples, utilize o comandogit stash branch <nome-da-branch>
; sendo que nesse caso também é possível informar qual exato stash você deseja, observe o exemplo:git stash branch <nome-da-branch> stash@{1}
.
Outros comandos uteis:
git stash show
Lista todos os arquivos modificados no ultimo stash;git stash clear
Realiza a remoção de todos os stash’s;git stash create <mensagem>
egit stash save <mensagem>
Ambos criam uma mensagem/nome para o stash;git stash pop
Realiza a remoção em ordem de pilha.
Para demais comandos, o melhor costuma ser a própria documentação.
Obrigado por ler o meu artigo, espero ter conseguido repassar meu conhecimento sobre o git stash. Este é meu primeiro artigo técnico aqui no Medium, por favor, considere deixar um feedback construtivo.
=)