Tempo de leitura: menos de 1 minuto
Na série que fiz sobre Git um tempo atrás (Links no fim do post), não falei sobre um dos comando mais interessantes. Me refiro o git stash.
Este comando é uma mão na roda. Sabe quando você está trabalhando em uma história complexa e código está confuso, do nada aparece um bug para você resolver? O que fazer? Você precisa mudar de branch, mas não pode fazer isso, pois as alterações não podem ser comitadas, ainda não está finalizada.
São nesses momentos que o stash resolver seu problema. Ao fazer um stash, você retira toda a “sujeira” do seu diretório de trabalho e “varre para de baixo do tapete”, põem em uma pilha de modificações. Isto possibilita mudar de branch, correção de bug e em momento oportuno, retirar as alterações da pilha e terminar implementação do que foi pausado.
Fazendo stash
Altere alguns arquivos de seu projeto, depois execute o comando git status.
[code language=”bash” highlight=”1″]
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>…" to update what will be committed)
(use "git checkout — <file>…" to discard changes in working directory)
modified: test/br/com/ederleite/codekata/domino/service/testTable.txt
no changes added to commit (use "git add" and/or "git commit -a")
[/code]
Se você tentar mudar de branch agora, o git lançará um erro sugerindo que as alterações devem ser commitada, antes de trocar a branch.
[code language=”bash” highlight=”1″]
$ git checkout branch_v01
error: Your local changes to the following files would be overwritten by checkout:
test/br/com/ederleite/codekata/domino/service/testTable.txt
Please, commit your changes or stash them before you can switch branches.
Aborting
[/code]
Para limpar sua área de trabalho e não perder suas alterações, use então o comando stash:
[code language=”bash” highlight=”1″]
$ git stash
Saved working directory and index state WIP on master: eb11b15 Faltou a exception
HEAD is now at eb11b15 Faltou a exception
[/code]
Prontinho, agora sua área de trabalho está limpa e enfim é possível trabalhar em um outra branch, ou recomeçar na branch que você está.
[code language=”bash” highlight=”1″]
$ git status
On branch master
nothing to commit, working directory clean
[/code]
Como disse, suas alterações estão armazenadas na pilha de stashes. Para vê-las, use o comando git stash list:
[code language=”bash” highlight=”1″]
$ git stash list
stash@{0}: WIP on master: eb11b15 Faltou a exception
[/code]
Este comando exibirá todas as stashes criadas por vocês. Neste exemplo existe apenas uma. A ordem de exibição das stashes é dada sempre da mais recente, essa normalmente recebe o nome (stash@{0}), para a última (stash@{n}).
Para retirar uma modificação da stash, “tirar de baixo do tapete”, e restaurar o diretório de trabalho, use o comando git stash apply. Este por sua vez, pega o stash mais recente (stash@{0}) e restaura-o.
Também é possível restaurar um stash mais antigo, para isso use o comando git stash apply <nome stash> ou git stash apply stash@{2} por exemplo.
[code language=”bash” highlight=”1″]
$ git stash apply
On branch master
Changes not staged for commit:
(use "git add <file>…" to update what will be committed)
(use "git checkout — <file>…" to discard changes in working directory)
modified: test/br/com/ederleite/codekata/domino/service/testTable.txt
no changes added to commit (use "git add" and/or "git commit -a")
[/code]
É isso aí pessoal, espero que tenham gostado!
Para maiores informações sobre git stash, acesse o GIT Book. Ou para ver os posts anteriores sobre Git, acesse um dos links abaixo:
- Git #1 – Por onde começar?
- Git #2: Principais comandos do dia a dia
- Git #3: Tags, Branches e comando remotos
- Git: Trocando de repositório remoto
