Git Stash - Arquivando alteraçoes de codigo sem dar commit para trabalhar depois
Qual problema resolve?
Quando trabalhamos com programaçao, temos sempre que estar prontos para arrumar correçoes de codigo o mais rapido possivel, muitas vezes subimos a PR de uma demanda, e ja vamos direto pra proxima.
As vezes e necessario parar a demanda atual para corrigir uma PR pendente, mas... oque fazer com as alteraçoes pendentes da demanda atual? voce poderia dar commit e apenas mudar de branch, ou apenas salvar alteraçoes em um bloco de notas e deletar as atualizaçoes. Mas convenhamos que nao sao opçoes atrativas, ninguem quer dar commit em codigo pela metade.
Mas e se desse para salvar as alteraçoes em cache e apenas recupera-las quando necessario?
ISSO E EXATAMENTE OQUE O GIT STASH FAZ! voce pode dar um stash nas alteraçoes, ou seja, esconder as alteraçoes, e ter um ambiente limpo novamente, e depois quando precisar recuperar, com apenas um comando esta tudo de novo na sua maquina... lindo nao?
Quais arquivos o git stash ira reconhecer
- alteracoes preparadas
git add
- alteraçoes nao preparadas de arquivos existentes
O git nao ira reconhecer
- aquivos ignorados
- novos arquivos que ainda nao foram preparados
Criar stash
$ git stash
Saved working directory and index state WIP on master: a30ba6c Fix typo
HEAD is now at a30ba6c Fix Typo
apos o comando, todas as alteraçoes rastreaveis ficam em estado de WIP (work in progress), logo, nenhuma alteraçao estara direto na branch, portanto, com o comando git status
verificara que nao existem arquivos modificados
- flag -u (--include-untracked) = inclui arquivos untracked no stash
git stash -u
- flag -a (--all) = inclui arquivos untracked e ignored no stash
git stash -a
Criar stash com arquivos especificos
$ git stash -p
a flag -p permite que voce escolha quais arquivos e modificaçoes quer dar o stash
ira descrever a modificaçao e perguntar se voce quer fazer o stash da alteraçao, e voce obviamente como e inteligente vai responder com (y/n)
Recuperar stash
o stash pode ser aplicado em qualquer branch do projeto
apply
$ git stash apply
On branch foobar
pop
$ git stash pop
On branch main
o git stash pop funciona como o apply, a diferença e que o pop, apos recuperar os dados, apaga o stash, ja o apply persiste e pode ser utilizado novamente
quando temos apenas um stash no cache este comando identifica e ja retorna as modificaçoes para a branch atual...
e quando tem mais de um stash, recupera o mais recente
POREM! quando temos mais de um stash no cache, como saber qual irei recuperar? BOA PERGUNTA JOVEM GAFANHOTO, para isso temos o git stash list!
Listar todos os stashs
$ git stash list
stash@{0}: WIP on master: a30ba6c Fix Typo
stash@{1}: WIP on foobar: d60hg8x Fix Typo
aqui listamos todos nosso stash em cache, e para recuperar um stash especifico git stash apply stash@{0}
, no caso oque mudaria de um comando par outro seria o nome do stash, por exemplo stash@{1}
Mostrar o conteudo de um stash
se voce for do tipo que tem perca de memoria, esse comando e pra vc
$ git stash show stash@{0}
ele ira mostrar as principais alteraçoes que o stash guarda, pra vc desorganizado!
- flag -p = mostra as alteraçoes (com + e -)
git stash show -p stash@{0}
Criar stash COM MENSAGEM
agora pra voce que ama organizaçao, tem como salvar uma mensagem no seu stash
$ git stash save "demanda EBL-293"
Saved working directory and index state On foobar: demanda EBL-293
agora quando der stash list, a mensagem tornara mais simples a identificaçao do stash
$ git stash list
stash@{0}: ON on foobar: demanda EBL-293
stash@{1}: WIP on master: a30ba6c Fix Typo
Deletar seu stash
e para nao deixar seu stash list poluido, aqui, como apagar um ou todos stashs
clear
$ git stash clear
o clear ira apagar todos seus stashs TOMA CUIDADO.
para sinalizar qual stash quer apagar, deve fazer assim:
drop
$ git stash drop stash@{0}
FINALIZAÇAO
esta e minha primeira vez fazendo um post na vida, estou testando como funciona o tap news, espero que o post seja util pra alguem e espero que nao tenha sido cansativo, fiquei 3 horas fazendo KKKK
espero nao ter esquecido nada... e aconselho que passem no post que me baseei, nele explica como logicamente funciona o stash, alem de ser bem melhor trabalhado que meu post
Att. Gabriel Aziz :)