Eu gostaria de fazer o seguinte fluxo de trabalho:
- Adicione alterações ao palco.
- Esconda todas as outras alterações que não foram testadas.
- Faça algumas coisas com as coisas em fase (por exemplo, compilar, executar testes etc.)
- Aplique o esconderijo.
Existe uma maneira de executar a etapa 2?
Exemplo
echo "123" > foo
git add foo # Assumes this is a git directory
echo "456" >> foo
git stash
cat foo # Should yield 123
man git stash
é muito melhor.Respostas:
git stash save
tem uma opção--keep-index
que faz exatamente o que você precisa.Então corra
git stash save --keep-index
.fonte
save
comgit stash
. Talvez seja o programador em mim insistindo em honrar a simetria com apply / pop. :)git stash save
é que ele também deixa as alterações já realizadas na sua cópia de trabalho. No fluxo de trabalho acima, isso funcionaria bem, pois você está aplicando o stash em cima de uma cópia local que já possui metade das alterações do stash (que o git é inteligente o suficiente para ignorar). Mas se você editar o código antes de aplicar novamente o stash, poderá ver conflitos de mesclagem ao aplicar. Para sua informação.git commit --ammend
se houver problemas no que eu cometi.--amend
(em vez de--ammend
)Isso pode ser feito em 3 etapas: salve as alterações faseadas, esconda todo o resto, restaure o índice com as mudanças faseadas. O que é basicamente:
Isso fará exatamente o que você deseja.
fonte
-u
também esconde arquivos não rastreados.git stash save --keep-index
faz com muito mais trabalho. Não vejo nenhuma vantagem.Além disso, Re:
R: Como você deve sempre verificar o código testado :) Isso significa que você precisa executar os testes apenas com as alterações que está prestes a confirmar
Tudo isso além do fato de que, claro, como um programador experiente, você tem o desejo inato de teste e análise apenas aquelas mudanças - única parte brincadeira
fonte
Com
git version 2.7.4
você pode fazer:O
git
irá pedir-lhe para adicionar ou não as alterações no esconderijo.E você então responde
y
oun
Você pode restaurar o diretório de trabalho, sempre fazendo isso:
ou, se você deseja manter as alterações salvas no stash:
fonte
Estendendo respostas anteriores, às vezes tenho um conjunto complexo de alterações em etapas, mas desejo confirmar uma alteração separada primeiro. Por exemplo, eu posso ter detectado um bug ou código incorreto que gostaria de corrigir antes das alterações em etapas. Um caminho possível a seguir é o seguinte:
primeiro esconda tudo, mas deixe as alterações em etapas intactas
agora esconda as mudanças faseadas separadamente também
faça alterações para correção; e teste; comprometa-os:
agora restaure as alterações preparadas anteriormente:
resolva quaisquer conflitos e observe que, se houver conflitos, o git terá aplicado, mas não eliminado, a entrada principal do stash.
(... Em seguida, confirme as alterações em etapas, restaure o estoque de todas as outras alterações e continue ...)
fonte
Para adicionar os arquivos não marcados (não adicionados à confirmação) ao stash, execute o seguinte comando:
Em seguida, você pode confirmar os arquivos temporários. Depois disso, você pode recuperar os últimos arquivos escondidos usando o comando:
fonte
Armazenar apenas a árvore de trabalho (alterações sem etapas) no Git é mais difícil do que deveria ser. A resposta aceita oculta as alterações não organizadas, mas também oculta as alterações organizadas (e as deixa organizadas também), o que raramente é o que você deseja.
Esse alias funciona bem:
Ele confirma temporariamente as alterações em etapas, cria uma ocultação das alterações restantes (e permite que argumentos adicionais como
--include-untracked
e--message
sejam passados como argumentos de alias) e redefine a confirmação temporária para recuperar as alterações em etapas.É semelhante à resposta de @Simon Knapp , mas com algumas pequenas diferenças - ele usa
--quiet
as ações temporárias executadas e aceita qualquer número de parâmetros para o stashpush
, em vez de codificar o código-m
e adiciona--soft
à final redefinir para que o índice permaneça como iniciado.Para o problema oposto de esconder apenas as mudanças faseadas (alias
stash-index
), veja esta resposta .fonte
Outra dica, relacionada à pergunta:
Quando você efetivamente esconde suas alterações não organizadas usando
convém enviar uma mensagem para o stash, para que, quando você fizer um
git stash list
, seja mais óbvio o que você escondeu antes, especialmente se você seguir essa operação de stash por mais salvamentos. Por exemplo(embora na verdade contenha todas as alterações, conforme observado em outras respostas).
Por exemplo, o acima pode ser seguido imediatamente por:
Cuidado, porém, que você não pode usar
para restaurar apenas as alterações não faseadas.
fonte
O Git não possui um comando que oculte apenas as alterações não-estágios.
O Git, no entanto, permite especificar quais arquivos você deseja ocultar.
Se você deseja ocultar apenas alterações específicas nesses arquivos, adicione a
--patch
opçãoA
--include-untracked
opção permite que você esconda arquivos não rastreados.Execute
git help stash
(ouman git-stash
) para obter mais informações.Nota: Se as suas alterações não organizadas são bastante desoganizadas, a resposta de @ alesguzik é provavelmente mais fácil.
fonte
A forma moderna desse comando é
git stash push [--] [<pathspec>...]
, desde o Git 2.16+ (git stash save
está obsoleto )Você pode combinar isso com um formulário curinga, por exemplo:
Mas isso não funciona bem com o Git para Windows, até o Git 2.22 (Q2 2019), veja a edição 2037 , considerando
git stash
que foi reimplementado em C (em vez de um shell script)Veja commit 7db9302 (11 Mar 2019) por Thomas Gummerer (
tgummerer
) .Consulte commit 1366c78 , commit 7b556aa ( 07/03/2019 ) por Johannes Schindelin (
dscho
) .(Incorporado por Junio C Hamano -
gitster
- in commit 0ba1ba4 , 22 de abr de 2019)fonte
Eu uso um alias, que aceita uma string para ser usada como uma mensagem na entrada stash.
Qual:
-u
ou-a
),--soft
para mantê-lo no índice).fonte