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.33.0 → 2.34.1 no changes
- 2.32.0 06/06/21
- 2.31.1 no changes
- 2.31.0 03/15/21
- 2.26.1 → 2.30.2 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
RESUMO
git stash list [<opções>] git stash show [<opções>] [<stash>] git stash drop [-q|--quiet] [<stash>] git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>] git stash branch <nome-do-ramo> [<stash>] git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [-m|--message <mensagem>] [--pathspec-from-file=<arquivo> [--pathspec-file-nul]] [--] [<pathspec>…]] 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 gravar a condição atual do diretório
ativo e do índice, porém queira voltar para um diretório funcional limpo. O
comando salva as suas alterações locais e reverte o diretório de trabalho
para coincidir ao commit HEAD
.
As alterações armazenadas por este comando podem ser listadas com o comando
git stash list
, inspecionadas com o comando git stash show
e restauradas
(potencialmente em cima de um commit diferente) com o comando git stash
apply
. Chamar o comando git stash
sem argumentos é o equivalente que
executar o comando git stash push
. É predefinido que um "stash" seja
listado como "WIP no nomedoramo …", porém você pode fornecer uma
mensagem mais descritiva na linha de comando durante a criação de um.
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" (como, 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" (como, por exemplo, o número
inteiro n
é o equivalente a um stash@{n}
).
COMANDOS
- push [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [-m|--message <mensagem>] [--pathspec-from-file=<arquivo> [--pathspec-file-nul]] [--] [<pathspec>…]
-
Salva as suas alterações locais em uma novo lançamento na stash e reverta-as para
HEAD
(na árvore de trabalho e no índice). A parte da <mensagem> é opcional e dá a descrição junto com a condição do empilhamento.Para fazer um instantâneo de forma rápida, você pode omitir o "push". Neste modo, os argumentos não opcionais não são permitidos, visam impedir que um subcomando com erro de ortografia faça uma entrada na pilha indesejada. As duas exceções são
stash -p
, que atua como um alias para ostash push -p
e os elementos pathspec, que são permitidos após um hífen duplo--
para desambiguação. - save [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [<mensagem>]
-
Esta opção já está obsoleta em favor da opção git stash push. Difere do "stash push", pois não pode lidar com o pathspec. Em vez disso, todos os argumentos não opcionais são concatenados para formar a mensagem "stash".
- list [<opções>]
-
Lista as entradas acumuladas (stash) que você possui atualmente. Cada entrada stash é listada com o seu nome (como por exemplo,
stash@{0}
é o lançamento mais recente,stash@{1}
é o lançamento anterior etc.), o nome do ramo que estava atual quando o foi feito um lançamento e uma breve descrição do commit onde a entrada teve base.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 [<opções>] [<stash>]
-
Exiba as alterações registradas na entrada stash como uma diferença entre o conteúdo oculto e o commit quando a entrada stash for criada. É predefinido que o comando exiba o "diffstat", porém aceite qualquer formato informado pelo comando git diff (como por exemplo,
git stash show -p stash@{1}
para exibir a segunda entrada mais recente em formato patch). Você pode usar as variáveis de configuraçãostash.showStat
e/oustash.showPatch
para alterar o comportamento predefinido. - 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 de estoque 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 efetua a averiguação de um novo ramo chamado
<nome-do-ramo>
iniciando a partir do commit onde o<stash>
foi criado originalmente, aplica as alterações registradas do<stash>
na nova árvore de trabalho e no índice. Caso seja bem-sucedido, e<stash>
for uma referência do formuláriostash@{<revision>}
, ele liberará o<stash>
.É útil caso o ramo onde você executou o
git stash push
mude o suficiente para que o` git stash apply` falhe devido aos conflitos. Como o acumulo da entrada é aplicada no topo do commit que era oHEAD
no momento em que ogit stash
foi executado, ela restaura a condição originalmente acumulada sem os conflitos. - clear
-
Remova todos os lançamentos acumulados. 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 stash (que é um objeto commit comum) e retorne seu nome de objeto, sem armazená-la em qualquer outro lugar no espaço de nomes "ref". Isso tem a intenção de ser útil para scripts. Provavelmente não é o comando que você deseja usar; veja o "push" acima.
- store
-
Armazene um determinado "stash" criado através do comando git stash create (que é um commit pendente de mesclagem) na "ref" determinada, atualizando o "reflog" do "stash". Isso tem a intenção de ser útil para scripts. Provavelmente não é o comando que você deseja usar; veja o "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
-
Esta opção só é válida para os comandos
push
esave
.Todos os arquivos que não sejam monitorados também são escondidos e limpos com o
git clean
. - --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 a diferença entre os blocos interativamente entre HEAD e a árvore de trabalho a serem estocados. The stash entry is constructed such that its index state is the same as the index state of your repository, and its worktree contains only the changes you selected interactively. The selected changes are then rolled back from your worktree. Consulte a seção “Modo Interativo” do git-add[1] para aprender como operar o modo
--patch
.A opção
--patch
implica no uso da opção--keep-index
. Você pode usar a--no-keep-index
para substituir isso. - --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 stash registra as condições alteradas apenas para os arquivos que coincidam com o pathspec. As entradas de índice e os arquivos da árvore de trabalho são revertidos para a condição no
HEAD
apenas para estes arquivos, deixando também os arquivos que não correspondem ao pathspec intactos.Para mais detalhes sobre a sintaxe <pathspec>, veja 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 o lançamento no estoque stash é representado como um commit cuja
árvore registra a condição do diretório de trabalho e a sua primeira origem
é o commit no HEAD
quando a entrada foi criada. A árvore da segunda
origem registra a condição do índice quando o lançamento é feito, e é feito
um herdeiro do commit HEAD
. O grafo de ascendência fica assim:
.----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 alguma coisa, aprende que há alterações upstream que são possivelmente relevantes para o que você está fazendo. Quando as suas alterações locais não entrarem em conflito com as alterações na "upstream", um simples
git pull
permitirá que você avance.No entanto, há casos onde as suas alterações locais entram em conflito com as alterações na upstream, e o
git pull
se recusa a sobrescrever as suas alterações. Nesse caso, é possível ocultar as suas alterações, executar um pull e remover da pilha, 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 alguma coisa, seu chefe entra e exige que você conserte algo imediatamente. Tradicionalmente, você faria um commit em um ramo temporário para armazenar as suas alterações e retornava ao ramo 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 # acumule todas as outras modificaçõ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'
- Recuperando entradas stash que foram limpas/eliminadas erroneamente
-
Caso você derrube ou limpe as entradas stash por engano, elas não poderão mais ser recuperadas pelos mecanismos de segurança normais. No entanto, é possível tentar o seguinte encantamento para obter uma lista das entradas stash que ainda estão em seu repositório, mas que não são mais acessíveis:
git fsck --unreachable | grep commit | cut -d\ -f3 | xargs git log --merges --no-walk --grep=WIP
GIT
Parte do conjunto git[1]