Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.43.1 → 2.47.0 no changes
- 2.43.0 11/20/23
- 2.42.1 → 2.42.3 no changes
- 2.42.0 08/21/23
- 2.39.1 → 2.41.2 no changes
- 2.39.0 12/12/22
- 2.38.1 → 2.38.5 no changes
- 2.38.0 10/02/22
- 2.35.1 → 2.37.7 no changes
- 2.35.0 01/24/22
- 2.32.1 → 2.34.8 no changes
- 2.32.0 06/06/21
- 2.31.1 → 2.31.8 no changes
- 2.31.0 03/15/21
- 2.26.1 → 2.30.9 no changes
- 2.26.0 03/22/20
- 2.24.1 → 2.25.5 no changes
- 2.24.0 11/04/19
- 2.23.1 → 2.23.4 no changes
- 2.23.0 08/16/19
- 2.22.1 → 2.22.5 no changes
- 2.22.0 06/07/19
- 2.17.1 → 2.21.4 no changes
- 2.17.0 04/02/18
- 2.16.6 12/06/19
- 2.15.4 no changes
- 2.14.6 12/06/19
- 2.13.7 05/22/18
- 2.12.5 09/22/17
- 2.11.4 09/22/17
- 2.8.6 → 2.10.5 no changes
- 2.7.6 07/30/17
- 2.1.4 → 2.6.7 no changes
- 2.0.5 12/17/14
RESUMO
git stash list [<opções-do-log>] git stash show [-u | --include-untracked | --only-untracked] [<opções-do-diff>] [<stash>] git stash drop [-q | --quiet] [<stash>] git stash pop [--index] [-q | --quiet] [<stash>] git stash apply [--index] [-q | --quiet] [<stash>] git stash branch <branchname> [<stash>] git stash [push [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet] [-u | --include-untracked] [-a | --all] [(-m | --message) <mensagem>] [--pathspec-from-file=<file> [--pathspec-file-nul]] [--] [<pathspec>…]] git stash save [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet] [-u | --include-untracked] [-a | --all] [<message>] git stash clear git stash create [<mensagem>] git stash store [(-m | --message) <mensagem>] [-q | --quiet] <commit>
DESCRIÇÃO
Use o comando git stash
quando quiser registrar o estado atual do diretório de trabalho e do índice, mas queira retornar para um diretório de trabalho limpo. O comando salva a suas alterações locais e reverte o diretório de trabalho para corresponder ao commit HEAD
.
As alterações armazenadas por este comando podem ser listadas com o comando git stash list
, inspecionadas através do comando git stash show
e restauradas (potencialmente em cima de um commit diferente) com o comando git stash apply
. Ao invocar o comando git stash
sem nenhum argumento é o mesmo que usar o comando git stash push
. É predefinido que um "stash" seja listado como "WIP on branchname …", mas você pode dar uma mensagem mais descritiva na linha de comando ao criá-lo.
O último "stash" que você criou é armazenado em refs/stash
; os "stash" mais antigos são encontrados no "reflog" desta referência e podem ser nomeados usando a sintaxe usual do "reflog" (por exemplo, stash@{0}
é o "stash" criado mais recentemente, o stash@{1}
é o anterior, o stash@{2.hours.ago}
também é possível). As pilhas "stash" também podem ser referenciadas definindo apenas o índice "stash" (por exemplo, o número inteiro n
é o equivalente a um stash@{n}
).
COMANDOS
- push [-p|--patch] [-S|--staged] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [(-m|--message) <mensagem>] [--pathspec-from-file=<arquivo> [--pathspec-file-nul]] [--] [<pathspec>…]
-
Salve as suas alterações locais numa nova "entrada de armazenamento" (stash entry) e reverta-as para
HEAD
(na árvore de trabalho e no índice). A parte da <mensagem> é opcional e fornece a descrição juntamente com o estado de armazenamento.Para criar rapidamente um instantâneo, você pode omitir "push". Neste modo, argumentos que não sejam opções não são permitidos para evitar que um subcomando mal escrito faça uma entrada indesejada no estoque. As duas exceções são
stash -p
, que atua como um atalho parastash push -p
e elementos pathpec, que são permitidos após um hífen duplo--
para desambiguação. - save [-p|--patch] [-S|--staged] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [<mensagem>]
-
Esta opção foi descontinuada em favor do comando git stash push. Ele difere do "stash push" pelo fato de não poder usar o pathspec. Em vez disso, todos os argumentos sem opção são concatenados para formar a mensagem de armazenamento.
- list [<opções-do-registro-log>]
-
Liste as entradas do "stash" que você tem atualmente. Cada "entrada da pilha" (stash entry) é listada com seu nome (por exemplo,
stash@{0}
é a entrada mais recente,stash@{1}
é a anterior, etc.), o nome do ramo que estava ativo quando a entrada foi feita e uma breve descrição do commit onde a entrada se baseou.stash@{0}: WIP on submit: 6ebd0e2... Update git-stash documentation stash@{1}: On master: 9cc0589... Add git-stash
O comando aceita as opções aplicáveis ao comando git log para controlar o que é exibido e como. See git-log[1].
- show [-u|--include-untracked|--only-untracked] [<opções-do-diff>] [<stash>]
-
Mostra as alterações registradas na entrada do estoque (stash) como uma diferença entre o conteúdo do estoque e o commit de quando a entrada do estoque foi criado pela primeira vez. É predefinido que o comando mostre o diffstat, mas aceitará qualquer formato conhecido pelo comando git diff (por exemplo,
git stash show -p stash@{1}
para visualizar a segunda entrada mais recente em forma de correção). Se nenhuma<opções-diff>
for informada, o comportamento padrão será dado pelas variáveis de configuração emstash.showStat
e emstash.showPatch
. Você também pode usarstash.showIncludeUntracked
para definir se a opção--include-untracked
está predefinitivamente ativa. - pop [--index] [-q|--quiet] [<stash>]
-
Remova a única condição do empilhamento da lista e aplique-o sobre a condição atual da árvore de trabalho, ou seja, faça a operação inversa do comando
git stash push
. O diretório de trabalho deve corresponder ao índice. O diretório de trabalho deve coincidir com o índice.A aplicação da condição pode falhar com conflitos; neste caso, ele não é removido da lista stash. É necessário resolver os conflitos manualmente e chamar o comando
git stash drop
manualmente depois. - apply [--index] [-q|--quiet] [<stash>]
-
Como
pop ', porém não remova a condição da lista de estoque 'stash'. Diferente de `pop
,<stash>
pode ser qualquer commit que se pareça com um commit criado através do comandostash push
oustash create
. - branch <nome-do-ramo> [<stash>]
-
Cria e verifica um novo ramo chamado
<nome-do-ramo>
a partir do commit onde o<stash>
foi originalmente criado, aplica as alterações registradas no<stash>
à nova árvore de trabalho e ao índice. Se isso for bem-sucedido e o<stash>
for uma referência do tipostash@{<revisão>}
, ele eliminará o<stash>
.É útil caso o ramo onde você executou o
git stash push
mude o suficiente para que ogit stash apply
falhe devido aos conflitos. Como a entrada que está acumulada "stash" é aplicada no topo do commit que era oHEAD
no momento onde ogit stash
foi executado, ela restaura a condição originalmente armazenada e sem os conflitos. - clear
-
Remova todos os lançamentos que estiverem armazenados. Observe que estas entradas estarão sujeitas a remoção e podem ser impossíveis de serem recuperadas (consulte Exemplos abaixo para uma possível estratégia).
- drop [-q|--quiet] [<stash>]
-
Remova uma única entrada "stash" da lista das entradas "stash".
- create
-
Crie uma entrada no estoque (onde é um objeto de commit regular) e retorne o nome do objeto, sem armazená-lo em nenhum lugar no espaço de nome ref. Esse recurso deve ser útil para scripts. Provavelmente, esse não é o comando que você deseja usar; consulte "push" acima.
- store
-
Armazena um determinado estoque criado via comando
git stash create
(onde é a mesclagem de um commit pendente) na referência do estoque, atualizando o reflog do estoque. Esse recurso deve ser útil para scripts. Provavelmente, esse não é o comando que você deseja usar; consulte "push" acima.
OPÇÕES
- -a
- --all
-
Esta opção só é válida para os comandos
push
esave
.Todos os arquivos ignorados e não monitorados também são armazenados em cache e limpos com o comando
git clean
. - -u
- --include-untracked
- --no-include-untracked
-
Quando usado em conjunto com os comandos
push
esave
, todos os arquivos não monitorados também são armazenados em cache e limpos com o comandogit clean
.Quando usado com o comando
show
, mostra os arquivos não rastreados na entrada acumulada como parte do diff. - --only-untracked
-
Esta opção só é válida para o comando
show
.Mostra apenas os arquivos não rastreados na entrada do stash como parte do diff.
- --index
-
Esta opção só é válida para os comandos
pop
eapply
.Tenta restabelecer não apenas as alterações da árvore de trabalho, mas também as do índice. No entanto, isso pode falhar quando há conflitos (que são armazenados no índice e portanto, não é mais possível aplicar as alterações como eram originalmente).
- -k
- --keep-index
- --no-keep-index
-
Esta opção só é válida para os comandos
push
esave
.Todas as alterações que já foram adicionadas ao índice não são alteradas.
- -p
- --patch
-
Esta opção só é válida para os comandos
push
esave
.Selecione interativamente as partes da diferença entre o
HEAD
e a árvore de trabalho a serem armazenadas. A entrada do estoque é construída de maneira que a sua condição no índice seja igual a condição no índice do seu repositório e a sua árvore de trabalho contenha apenas as alterações que você selecionou interativamente. As alterações selecionadas são revertidas de sua árvore de trabalho. Consulte a seção “Modo Interativo” do git-add[1] para saber como operar o modo--patch
.A opção
--patch
implica no uso da opção--keep-index
. Você pode usar a opção--no-keep-index
para substituir isso. - -S
- --staged
-
Esta opção só é válida para os comandos
push
esave
.Armazene apenas as alterações que estão sendo preparadas atualmente. Isto é similar ao comando
git commit
básico, exceto que o estado do commit é feito na pilha armazenada em vez do ramo atual.A opção
--patch
tem prioridade sobre esta. - --pathspec-from-file=<arquivo>
-
Esta opção só é válida para o comando
push
.O "pathspec" é passado com
<arquivo>
em vez dos argumentos da linha de comando. Caso o<arquivo>
seja exatamente-
, a entrada padrão será utilizada. Os elementos do "pathspec" são separados por caracteres de término de linhaLF
ouCR/LF
. Os elementos do "pathspec" podem ser citados conforme explicado na variável de configuraçãocore.quotePath
(consulte git-config[1]). Consulte também opção--pathspec-file-nul
e o global--literal-pathspecs
. - --pathspec-file-nul
-
Esta opção só é válida para o comando
push
.Só faz algum sentido caso seja utilizado junto com a opção
--pathspec-from-file
. Os elementos "pathspec" são separados com caracteresNUL
e todos os outros caracteres são considerados de forma literal (incluindo as novas linhas e as citações). - -q
- --quiet
-
Esta opção só é válida para os comandos
apply
,drop
,pop
,push
,save
estore
.Silencioso, suprima as mensagens de feedback.
- --
-
Esta opção só é válida para o comando
push
.Separa o pathspec das opções para fins de desambiguação.
- <pathspec>…
-
Esta opção só é válida para o comando
push
.A nova entrada no estoque registra os estados modificados apenas para os arquivos que correspondem ao pathpec. As entradas de índice e os arquivos da árvore de trabalho são revertidos para o estado em
HEAD
somente para esses arquivos também, deixando intactos os arquivos que não correspondem ao pathpec.Para mais detalhes sobre a sintaxe, consulte a entrada pathspec em gitglossary[7].
- <stash>
-
Esta opção só é válida para os comandos
apply
,branch
,drop
,pop
eshow
.Uma referência do formulário
stash@{<revisão>}
. Quando nenhum<stash>
é informado, o último "stash" é assumido (ou seja,stash@{0}
).
DISCUSSÃO
Uma entrada no estoque é representada como um commit cuja árvore registra a condição do diretório de trabalho, e o seu principal primário é o commit em HEAD
quando a entrada foi criada. A árvore do principal secundário registra a condição do índice quando a entrada é feita, e ela se torna um relacionado do commit HEAD
. O gráfico de ascendência tem a seguinte aparência:
.----W / / -----H----I
onde H
é o commit HEAD
, I
é um commit que registra a condição do índice e W
é um commit que registra a condição da árvore de trabalho.
EXEMPLOS
- Obtendo de um diretório sujo
-
Quando você está no meio de algo, fica sabendo que há alterações no topo que possivelmente são relevantes para o que você está fazendo. Quando as suas alterações locais não entrarem em conflito com as alterações no topo, um simples
git pull
permitirá que você siga em frente.No entanto, há casos onde as suas alterações locais entram em conflito com as alterações no topo e o comando
git pull
se recusa a substituir as suas alterações. Nesse caso, você pode estocar as suas alterações, fazer um "pull" e, em seguida, desfazer o estoque, da seguinte maneira:$ git pull ... file foobar not up to date, cannot merge. $ git stash $ git pull $ git stash pop
- Fluxo de trabalho interrompido
-
Quando você está no meio de um trabalho, seu chefe chega e exige que você conserte algo imediatamente. Tradicionalmente, você faria um commit numa ramificação temporária para armazenar as suas alterações e retornaria à ramificação original para fazer a correção de emergência, assim:
# ... hack hack hack ... $ git switch -c my_wip $ git commit -a -m "WIP" $ git switch master $ edit emergency fix $ git commit -a -m "Arruma na pressa" $ git switch my_wip $ git reset --soft HEAD^ # ... continue a hackear ...
Você pode utilizar o comando git stash para simplificar o exemplo acima:
# ... hack hack hack ... $ git stash $ edit emergency fix $ git commit -a -m "Arrumando na correria" $ git stash pop # ... continue a hackear ...
- Testando commits parciais
-
Você pode utilizar o comando
git stash push --keep-index
quando quiser fazer dois ou mais commits das alterações na árvore de trabalho e queira testar cada uma das alterações antes de fazer o commit:# ... hack hack hack ... $ git add --patch foo # adiciona apenas a primeira parte ao índice $ git stash push --keep-index # armazene todas as outras alterações $ edit/build/test first part $ git commit -m 'First part' # faça o commit completo de todas as modificações testadas $ git stash pop # prepare para trabalhar em todas as outras modificações # ... repita os cinco passos acima até que sobre apenas um commit ... $ edit/build/test remaining parts $ git commit foo -m 'Partes resultantes'
- Salvando as alterações não relacionadas para utilização futura
-
Quando estiver no meio de grandes alterações e encontre algum problema não relacionado que você não queira deixar de corrigir, você pode fazer as alterações, organizá-las e usar o comando
git stash push --staged
deixando guardado para uso posterior. Isso se assemelha ao fazer o commit das alterações acumuladas, apenas o commit acaba ficando armazenado e não no ramo atual.# ... hack hack hack ... $ git add --patch foo # adiciona alterações não relacionadas ao índice $ git stash push --staged # salva estas alterações na pilha # ... hack hack hack, conclui as alterações atuais ... $ git commit -m 'Massive' # faz o commit de das alterações totalmente testadas $ git switch fixup-branch # alterna para outro ramo $ git stash pop # para concluir o trabalho nas alterações salvas
- Recuperando entradas "stash" que foram limpas/eliminadas erroneamente
-
Se você deixar cair ou limpar entradas de estoque por engano, elas não poderão ser recuperadas por meio dos mecanismos de segurança normais. No entanto, você pode tentar a seguinte magia para obter uma lista de entradas do estoque que ainda estão em seu repositório, mas que não podem mais ser acessadas:
git fsck --unreachable | grep commit | cut -d\ -f3 | xargs git log --merges --no-walk --grep=WIP
CONFIGURAÇÃO
Warning
|
Missing See original version for this content. |
Warning
|
Missing See original version for this content. |
GIT
Parte do conjunto git[1]