Como o git é fundamentalmente sobre o gerenciamento de todo o conteúdo e índice de repositório (e não um ou vários arquivos), git stash
lida, sem surpresa,com o diretório all working.
Na verdade, desde o Git 2.13 (Q2 2017), você pode ocultar arquivos individuais, com git stash push
:
git stash push [--] [<pathspec>...]
Quando pathspec
atribuído a ' git stash push
', o novo stash registra os estados modificados apenas para os arquivos que correspondem ao pathspec. Consulte " Alterações no stash para arquivos específicos " para obter mais informações.
Exemplo simplificado:
git stash push path/to/file
O caso de teste para esse recurso mostra mais algumas opções:
test_expect_success 'stash with multiple pathspec arguments' '
>foo &&
>bar &&
>extra &&
git add foo bar extra &&
git stash push -- foo bar &&
test_path_is_missing bar &&
test_path_is_missing foo &&
test_path_is_file extra &&
git stash pop &&
test_path_is_file foo &&
test_path_is_file bar &&
test_path_is_file extra
A resposta original (abaixo, junho de 2010) era sobre a seleção manual do que você deseja ocultar.
Comentários do Casebash :
Isso (a stash --patch
solução original) é legal, mas muitas vezes eu modifiquei muitos arquivos, então usar o patch é irritante
bukzor de resposta (upvoted, Novembro de 2011) sugere uma solução mais prático, com base em
git add
+git stash --keep-index
.
Vá ver e avalie a resposta dele, que deve ser a oficial (em vez da minha).
Sobre essa opção, chhh aponta um fluxo de trabalho alternativo nos comentários:
você deve " git reset --soft
" após esse estoque para recuperar o armazenamento temporário claro: para retornar
ao estado original - que é uma área de armazenamento temporário clara e com apenas algumas modificações não preparadas, é possível redefinir suavemente o índice para obter (sem cometendo qualquer coisa como você - bukzor - fez).
(Resposta original em junho de 2010: esconderijo manual)
No entanto, o git stash save --patch
poderia permitir que você obtenha o armazenamento parcial que deseja:
Com --patch
, você pode selecionar de forma interativa pedaços no diff entre HEAD e a árvore de trabalho a ser escondida.
A entrada stash é construída de modo que seu estado de índice seja o mesmo do seu repositório e sua árvore de trabalho contém apenas as alterações que você selecionou interativamente. As alterações selecionadas são revertidas da sua árvore de trabalho.
No entanto, isso salvará o índice completo (que pode não ser o que você deseja, pois pode incluir outros arquivos já indexados) e uma árvore de trabalho parcial (que pode parecer com a que você deseja ocultar).
git stash --patch --no-keep-index
pode ser um ajuste melhor.
Se --patch
não funcionar, um processo manual pode:
Para um ou vários arquivos, uma solução intermediária seria:
- copie-os para fora do repositório Git
(na verdade, o eleotlecram propõe uma alternativa interessante )
git stash
- copie-os de volta
git stash
# desta vez, apenas os arquivos que você deseja são escondidos
git stash pop stash@{1}
# reaplique todas as modificações de seus arquivos
git checkout -- afile
# redefine o arquivo para o conteúdo HEAD, antes de qualquer modificação local
No final desse processo bastante complicado, você terá apenas um ou vários arquivos armazenados.
git stash --keep-index
mantém o índice, mas esconde tudo - tanto no índice quanto fora dele.