Como usar o Git para esconder suas alterações com o nome associado e encontrá-lo depois
Os desenvolvedores geralmente precisam realizar várias tarefas ao mesmo tempo. Você pode estar trabalhando em um novo recurso e pode haver uma solicitação para corrigir um bug. Ou você pode ser o desenvolvedor líder em vários projetos.
Quando você está alternando entre as tarefas, às vezes você não quer comprometer o trabalho inacabado. Nesses casos, o comando git stash pode ser de grande ajuda. Ele permite que você empilhe suas alterações e depois volte ao trabalho inacabado sem adicionar commits desnecessários aos seus repositórios git.
Um fluxo de trabalho para Git Stash
Vamos inicializar um branch master git e enviar um arquivo ReadMe.TXT.
$ mkdir my_project$ cd my_project /
$ git init
$ touch ReadMe.TXT
$ git add -A
$ git commit -m "Inicializar"
Agora vamos adicionar outro arquivo chamado.txt para o branch master.
$ touch a.TXT$ git add -A
$ git commit -m "Adicionou um.TXT"
Se você verificar o histórico, verá:
$ git log --onelined79f7aa Adicionado um.TXT
9434d7e Inicializar
Agora vamos criar um branch feature1 e adicionar um b.arquivo txt:
$ git branch feature1$ git checkout feature1
$ touch b.TXT
$ git add -A
$ git commit -m "Adicionado b.TXT"
Abra seu b.arquivo txt em um editor e coloque na linha:
Estou prestes a mudar isso para ..E salve o arquivo. Se você verificar seu status git, verá o seguinte:
$ git statusNo ramo feature1
Mudanças não preparadas para confirmação:
(use "git add
(use "git checkout --
modificado: b.TXT
nenhuma alteração adicionada ao commit (use "git add" e / ou "git commit -a")
Suponha que, nesta fase, você receba uma solicitação para atualizar o.arquivo txt no branch master. Mas você não terminou com o b.arquivo txt. Se você tentar verificar o branch master, receberá o seguinte erro:
$ git checkout mastererro: suas alterações locais nos arquivos a seguir seriam substituídas pelo checkout:
b.TXT
Por favor, confirme suas alterações ou armazene-as antes de trocar de branch.
Abortando
Mas você não quer comprometer o trabalho inacabado em b.TXT. Você pode usar o git stash nesta situação:
$ git stashDiretório de trabalho salvo e WIP de estado de índice no recurso 1: 2cfe39b adicionado b.TXT
HEAD está agora em 2cfe39b Adicionado b.TXT
Se você marcar b.txt, deve estar vazio:
$ cat b.TXT$
Se você verificar o estoque, verá:
$ git stash liststash @ 0: WIP em feature1: 2cfe39b adicionado b.TXT
Se você tentar verificar o branch master, deverá ser capaz de fazer isso agora:
$ git checkout masterMudou para branch 'master'
Suponha que você faça as alterações necessárias no mestre e volte ao branch feature1:
$ git checkout feature1Seu b.txt ainda está vazio:
$ cat b.TXT$
Mas se você obtiver as alterações do stash usando o seguinte comando:
$ git stash se aplicaNo ramo feature1
Mudanças não preparadas para confirmação:
(use "git add
(use "git checkout --
modificado: b.TXT
nenhuma alteração adicionada ao commit (use "git add" e / ou "git commit -a")
O comando stash apply pegou as alterações armazenadas e as aplicou a b.arquivo txt
Você pode completar seu trabalho em b.txt minha modificando a linha
Para
Agora vá em frente e confirme suas alterações:
$ git add -A$ git commit -m "Modificado b.TXT"
Aplicar um estoque não o limpa automaticamente do estoque. Você deve limpá-lo manualmente:
$ git stash dropRefs / stash descartados @ 0 (0a66a16b32633e8d564d08e38254c491c1b1d3be)
Por que Git Stash com nome?
O git stash é uma pilha. Então você pode continuar empilhando suas mudanças.
Suponha que você adicione “X” a b.txt, esconda-o, adicione um “Y” a b.txt, esconda-o e adicione um “Z” a b.txt e esconda-o. Se você verificar o histórico de stash, verá algo assim:
$ git stash list[email protegido] 0: WIP no recurso1: 2d6f515 Modificado b.TXT
[e-mail protegido] 1: WIP no recurso 1: 2d6f515 Modificado b.TXT
[email protegido] 2: WIP no recurso 1: 2d6f515 Modificado b.TXT
Você não tem como saber qual estoque tem qual mudança. Quando você está escondendo, você pode usar a opção salvar para colocar comentários. Você pode usar os comentários para anexar um nome ao seu estoque e torná-los reconhecíveis:
$ git stash save "X"Diretório de trabalho salvo e estado de índice em feature1: X
HEAD está agora em 2d6f515 Modificado b.TXT
Para adicionar a modificação “X”, “Y” e “Z”, você pode obter o seguinte em seu estoque usando a opção de salvar para cada estoque:
$ git stash liststash @ 0: No feature1: Z
stash @ 1: No feature1: Y
stash @ 2: No recurso1: X
Agora você tem um nome para cada mudança que guardou. Infelizmente, você não pode usar o nome para recuperar o estoque. Você terá que usar o número do estoque. Suponha que você deseja obter a sua mudança “Y”. Você vê que [e-mail protegido] 1 é Y. Portanto, você pode aplicar essa mudança ao seu ramo atual:
$ git stash apply stash @ 1E seu b.txt deve ter as alterações de [e-mail protegido] 1.
Você pode usar o mesmo método para deixar um estoque. Suponha que você perceba que não precisa mais do X stash. Você pode simplesmente usar o seguinte comando para excluir esse esconderijo:
$ git stash drop stash @ 2E o estoque deve ter sumido:
$ git stash liststash @ 0: No feature1: Z
stash @ 1: No feature1: Y
Lembre-se de que se você usar as opções aplicar e descartar sem nenhum parâmetro, ele usará o topo da pilha ([e-mail protegido] 0).
Conclusão
O comando git stash é uma maneira poderosa de gerenciar seu espaço de trabalho. Dominar este comando irá ajudá-lo a trabalhar com mais eficiência.
Um estudo mais aprofundado:
- https: // git-scm.com / book / en / v1 / Git-Tools-Stashing
Referências:
Stack Overflow: how-to-name-and-retrieve-a-stash-by-name-in-git