Eu escondi algumas alterações locais antes de fazer uma mesclagem complicada, fiz a mesclagem e esqueci estupidamente de confirmar antes de executar git stash pop
. O pop criou alguns problemas (mau método chama em uma grande base de código) que estão se mostrando difíceis de rastrear. Eu corri git stash show
, pelo menos sei quais arquivos foram alterados. Se nada mais, acho que é uma lição para comprometer mais.
Minha pergunta: é possível desfazer o stash pop sem também desfazer a mesclagem?
git stash pop
antes de cometer. O que você fez para conseguir isso?git stash pop
depois de preparar as alterações (embora eu não confirmei) com a versão 2.25.0.windows.1 do gitstash pop/apply
antes de fazer um commit, você pode disparargit fsck --lost-found
. Este comando irá percorrer os blobs dangling (arquivos reais para aqueles que não estão familiarizados com a terminologia git) que foram preparados, mas não confirmados em nenhum lugar (portanto, dangling), e os colocarão no diretório .git / lost-found / , onde você podegit show
ver se estes são os arquivos que você está procurando.Respostas:
Tente usar Como recuperar um stash descartado no Git? para encontrar o estoque que você colocou. Eu acho que sempre existem dois commits para um stash, pois ele preserva o índice e a cópia de trabalho (geralmente o commit do índice estará vazio). Então
git show
eles para ver o diff e usarpatch -R
para desaplicá-los.fonte
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
(no link) e encontrei o problema manualmente a partir desse diff. Obrigado!git diff -p ${STACH_SHA1}~1 ${STASH_SHA1} | patch -R -p1
:; Eu tentei comgit show
o sugerido, mas sua saída não era boa para o patch; também tive que fornecer a-p1
opção de corrigir para remover o elementoa/..
eb/..
quegit diff
coloca na frente dos arquivos, caso contrário não resolveria os caminhos da raiz do repositório. SUGESTÃO: seja cauteloso e cometa a bagunça em um galho separado antes de jogar com o patch.stash pop
estash push
acionará uma confirmação que salvaria as alterações no índice e no diretório de trabalho, certo?De
git stash --help
Isso me ajudou melhor do que a resposta aceita no mesmo cenário.
fonte
Se sua mesclagem não fosse muito complicada, outra opção seria:
Depois disso, você ficará com apenas as alterações do estoque que você deixou cair muito cedo.
fonte