Git: Comando Stash

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.

Charge 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.

debaixo_tapeteSã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.

$ 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")

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.

$ 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

Para limpar sua área de trabalho e não perder suas alterações, use então o comando stash:

$ git stash
Saved working directory and index state WIP on master: eb11b15 Faltou a exception
HEAD is now at eb11b15 Faltou a exception

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á.

$ git status
On branch master
nothing to commit, working directory clean

Como disse, suas alterações estão armazenadas na pilha de stashes. Para vê-las, use o comando git stash list:

$ git stash list
stash@{0}: WIP on master: eb11b15 Faltou a exception

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.

$ 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")

É isso aí pessoal, espero que tenham gostado!Git

Para maiores informações sobre git stash, acesse o GIT Book. Ou para ver os posts anteriores sobre Git, acesse um dos links abaixo:

 

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: