O Git stash parece fazer muito do que eu quero, exceto que é um pouco difícil de script, pois se você não tiver alterações, git stash; git stash pop
fará algo diferente do que se você tiver alterações em seu repositório.
Parece que git stash create
é a resposta para esse problema, e tudo funciona, exceto por uma coisa ... Não consigo me livrar do estoque criado. Existe alguma maneira de se livrar do esconderijo?
Para deixar 100% claro o que estou fazendo:
Crie o stash:
~/tmp/a(master) $ git stash create
60629375d0eb12348f9d31933dd348ad0f038435
~/tmp/a(master) $ git st
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: b
#
~/tmp/a(master) $ git reset --hard
HEAD is now at 555d572 log message
Use o esconderijo:
~/tmp/a(master) $ git apply 60629375d0eb12348f9d31933dd348ad0f038435
fatal: can't open patch '60629375d0eb12348f9d31933dd348ad0f038435': No such file or directory
~/tmp/a(master) $ git stash apply 60629375d0eb12348f9d31933dd348ad0f038435
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: b
#
Exclua o stash: (exceto que este último bit não funciona)
~/tmp/a(master) $ git stash drop !$
git stash drop 60629375d0eb12348f9d31933dd348ad0f038435
'60629375d0eb12348f9d31933dd348ad0f038435' is not a stash reference
git apply
execução na segunda caixa de código no momento da redação deste documento não aplicava um patch - a mensagem de erro na saída informava isso. Então, na verdade, você tentou criar um stash (que não funcionou, veja os comentários abaixo), aplique um stash que não foi criado e solte um stash que não foi criado. É por isso que nada que você fez funcionou.git stash apply
que funcionou. Asgit apply
tentativas de ler um arquivo de patch local, que não existe. Para ser honesto, provavelmente não deveria estar lá, e nunca poderia ter funcionado. Estou vagamente tentado a removê-lo da questão, mas, como ele ajudou muitos em sua forma atual, vou deixá-lo como está.Respostas:
Para excluir um stash normal criado com
git stash
, você desejagit stash drop
ougit stash drop stash@{n}
. Veja abaixo para mais detalhes.Você não precisa excluir um stash criado com
git stash create
. Dos documentos:Como nada faz referência ao commit do stash, ele será coletado como lixo eventualmente.
Um stash criado com
git stash
ougit stash save
é salvo emrefs/stash
e pode ser excluído comgit stash drop
. Como em todos os objetos Git, o conteúdo do stash real não é excluído do computador até quegc
os objetos sejam removidos após a expiração (o padrão é 2 semanas depois).Os stashes mais antigos são salvos no
refs/stash
reflog (tentativacat .git/logs/refs/stash
) e podem ser excluídos comgit stash drop stash@{n}
, onden
é o número mostrado porgit stash list
.fonte
git stash
- não sei se isso realmente mapeiagit stash create
ou algo mais. Git é certamente algo que eu ainda estou aprendendo sobre (se não fosse, eu não estaria lendo SO Q & A como esta.)git stash create
. Em vez de salvar em um arquivo de patch com carimbo de data e hora, você pode apenas deixar o git reflog salvá-lo em uma referência personalizada (por exemplorefs/backup
). Eu tentaria algo como 1)git stash create
, 2) compare a nova árvore de esconderijo comrefs/backup^{tree}
, 3) se a árvore for diferentegit update-ref --create-reflog refs/backup <stash-sha>
,. Eventualmente, os stashes de backup antigos serão removidos automaticamente.git stash drop
não usa nenhum parâmetro - que elimina o stash superior - ou uma referência de stash que se parece com:stash@{n}
qualn
nomeia qual stash a ser descartado. Você não pode passar um ID de confirmaçãogit stash drop
.Soltar um stash alterará as
stash@{n}
designações de todos os stash mais abaixo na pilha.Não sei por que você acha que precisa soltar um stash porque, se você estiver usando
stash create
uma entrada de stash, não é criado para o seu "stash", não há nada para soltar.fonte
Se você tem 100% de certeza de ter apenas um stash ou deseja excluir todos os stash (
git stash list
certifique-se de ter 107% de certeza), você pode:..e esqueça-os (apaga todos os esconderijos).
Nota: Adicionada esta resposta para aqueles que acabaram aqui procurando uma maneira de limpá-los todos (como eu).
fonte
git stash drop
, pois isso apenas descarta um estoque e você não precisa se preocupar em perder mais do que o esperado.git stash drop
como de costume. Não tenho certeza do que fiz de maneira diferente. Enfim,git stash clear
funcionou para mim. Não sabia que existia. +1No documento git: http://git-scm.com/docs/git-stash
Remova um único estado oculto da lista de esconderijos. Quando não é dado, ele remove o último. ou seja
stash@{0}
, caso contrário, deve ser uma referência de log stash válida do formulário stash @ {}.exemplo:
Isso excluiria a entrada stash 5. Para ver toda a lista de stash:
fonte
git stash show stash@{REPLACE_IT_WITH_STASH_INDEX}
antes de executargit stash drop
. Acredite em mim, ele vai salvar um monte de problemas :)Você deveria estar usando
e não
porque isso cria uma ocultação (que é um objeto de confirmação regular) e retorna seu nome de objeto, sem armazená-lo em qualquer lugar no espaço para nome ref. Portanto, não será acessível com a aplicação de stash.
O uso
git stash save "some comment"
é usado quando você tem alterações em estágios que deseja replicar / mover para outra ramificaçãoUse
git stash apply stash@{0}
(supondo que seu índice de stash salvo seja 0) quando desejar que as alterações salvas (armazenadas) reflitam em sua ramificação atualvocê sempre pode usar
git stash list
para verificar todos os seus índices stashe use
git stash drop stash@{0}
(supondo que seu índice de stash salvo seja 0 e você deseja excluí-lo) para excluir um stash específico.fonte
git stash
padrãogit stash save
git stash create
destina-se a ser usado por scripts. Esse é o caso de uso do OP. Portanto, a recomendaçãogit stash save
pode ser útil para usos "normais", mas não para o caso de uso do OP. O OP pode querer dar uma olhada nos documentos : há mais comandos relacionados a scripts, por exemplogit stash store
git stash save "message"
hoje em dia deve lergit stash push -m "message"
. Comparegit commit -m "message"
Também funciona
gostar
fonte
O documento está aqui (em chinês), por favor clique.
você pode usar
fonte
git stash create
é diferente degit stash save
, em particular, o formulário de criação não aparece na lista e não pode ser descartado, daí a pergunta.fonte