Entrei em uma filial e fiz alguns trabalhos. Eu queria ir para outro branch, mas não queria me comprometer, então eu fiz git stash
. Então eu fiz git checkout <otherbranch>
. Fiz alguns trabalhos lá e, assim como no primeiro branch, queria sair dele antes de comprometer o trabalho. Então eu fiz git stash
lá também. Voltei para o primeiro branch e tentei removê-lo ( git stash pop
) pensando que ele iria obter o stash daquele branch específico. Fiquei surpreso com o fato de que ele removeu o estoque de <otherbranch>
(mais recente). Fiquei com a impressão de que o stash é específico do branch, mas esse comportamento indica que há apenas um stash para todo o repositório local.
É git stash
específico do ramo ou para todo o repositório? Se for para todo o repositório, posso passar opções para torná-lo específico para o branch?
stash list
item além de apenas uma descrição?git stash show
(ougit stash show stash@{<number>}
para algo diferente da@{0}
versão) dá a você umdiff --stat
; adicione-p
para obter uma diferença maior. Nota: isso compara a "árvore de trabalho" na "bolsa de armazenamento" com o commit de onde ela está pendurada; não há interface de front-end para ver o que está no "índice" no pacote de armazenamento fornecido.Não e Não. Git stash é por repositório.
Aqui está uma boa página sobre como usá-lo.
fonte
git stash
não é por ramo.git stash
(que pode ser perdido facilmente quando você tem muitos esconderijos e branches)git commit
para salvar o código inacabado em seu branch e quando você estiver pronto para terminar o código faça umgit reset ${COMMIT_HASH_VALUE}
para obter o código inacabado de voltagit commit
egit reset
quando usados juntos corretamente podem simular umgit stash
para um ramo específicoAqui está um cenário comum da vida real que demonstra o valor e o uso dos comandos
commit
ereset
:git commit
branch X no recursoCOMMIT_HASH_VALUE
para mais tardegit reset ${COMMIT_HASH_VALUE}
(Para sua informação, o padrão
git reset
é--mixed
)fonte
git reset HEAD~1
.HEAD^1
ouHEAD~1
.Não tenho certeza de por que todas as respostas aqui sugerem emular o estoque com
commit
+reset
. O Stash é perfeitamente adequado para uso, especialmente ao trabalhar em vários ramos. Eu também não quero fazer commit quando trabalho em vários branches, porque quero que todas as mudanças modificadas ainda estejam destacadas no meu editor quando eu retornar.Então, aqui está o fluxo de trabalho do stash:
Sempre que você tiver que trocar de branch e não estiver pronto para submeter, salve suas alterações na pilha
Quando você retornar a uma filial, verifique o estoque
Se você estiver no ramo,
FixIssue0203
você poderia usargit stash pop
porque isso aplicará o topostash@{0}
e o removerá do stash.No entanto, se você estiver no ramo,
ImproveReadme
você deve primeiro aplicar o estoque 1git stash apply stash@{1}
e depois remover o estoque 1 da pilhagit stash drop stash@{1}
.É isso aí!
fonte