Eu disse acidentalmente git rm -r .
. Como me recupero disso?
Eu não cometi.
Acho que todos os arquivos foram marcados para exclusão e também foram fisicamente removidos do meu checkout local.
EDIT: eu poderia (se soubesse o comando) reverter para o último commit. Mas seria muito melhor se eu pudesse desfazer o git rm -r .
. Porque não tenho muita certeza do que fiz após o último commit e antes do git rm -r .
.
-f
aogit rm
git, não removerá nenhum arquivo que tenha sido alterado ou não em etapas, portanto, vocêgit reset; git checkout .
deve recuperar tudo.git restore
:git restore -s@ -SW -- .
. Veja minha resposta abaixo .Respostas:
Deveria fazê-lo. Se você não tiver alterações não confirmadas com as quais se preocupa,
deve redefinir tudo à força para seu último commit. Se você tiver alterações não confirmadas, mas o primeiro comando não funcionar, salve as alterações não confirmadas com
git stash
:fonte
git reset --hard HEAD
destrói quaisquer alterações úteis feitas nos diretórios pai do diretório de trabalho atual.Git-rm'd alguns arquivos e continuei fazendo alterações antes do meu próximo commit quando percebi que precisava de alguns desses arquivos de volta. Em vez de esconder e redefinir, você pode simplesmente fazer o checkout dos arquivos individuais que você perdeu / removeu, se desejar:
Isso deixa intactas outras alterações não confirmadas, sem soluções alternativas.
fonte
git rm
e não uma recursiva inteiragit rm -r
. Para uma exclusão recursiva completa, as outras soluções podem ser melhores, dependendo da quantidade de arquivos removidos.Para recuperar alguns arquivos ou pastas, pode-se usar o seguinte
Isso primeiro recriará as entradas de índice
path/to/file
e recriará o arquivo como estava na última confirmação, ou sejaHEAD
.Dica: pode-se passar um hash de confirmação para os dois comandos para recriar arquivos de uma confirmação mais antiga. Veja
git reset --help
egit checkout --help
para detalhes.fonte
git rm
operação sem eliminar outras alterações não confirmadas.Atualizar:
Como
git rm .
exclui todos os arquivos neste e nos diretórios filho, no checkout de trabalho e no índice, você precisa desfazer cada uma dessas alterações:Isso deve fazer o que você quiser. Não afeta as pastas pai do seu código ou índice de saída.
Resposta antiga que não era:
fará o truque e não apagará nenhuma alteração não confirmada que você tenha feito nos seus arquivos.
depois disso, você precisa repetir todos os
git add
comandos que você colocou na fila.fonte
git alias.co="checkout"
para quegit co
faça o checkout.Se você não executar nenhuma das opções acima, poderá recuperar dados usando a sugestão aqui: http://www.spinics.net/lists/git/msg62499.html
fonte
desfazer git rm
desfazer git rm -r
desfazer git rm -rf
Uncommitted changes
incluinot staged changes
,staged changes but not committed
.fonte
git rm -rf
, pois isso também pode excluir arquivos não rastreados ou faseados (apenas).git rm -rf file
egit rm -rf dir
não excluirá nenhum arquivo não rastreado.Se você tiver confirmado e enviado as alterações, poderá fazer isso para recuperar o arquivo
fonte
Já existem boas respostas, mas posso sugerir uma sintaxe pouco usada que não só funciona muito bem, mas é muito explícita no que você deseja (portanto, não é assustador nem misterioso)
fonte
Obter confirmação da lista
Por exemplo, Stable commit hash:
45ff319c360cd7bd5442c0fbbe14202d20ccdf81
fonte
Eu tive uma situação idêntica. No meu caso, a solução foi:
fonte
Com o Git 2.23+ (agosto de 2019), o comando apropriado para restaurar arquivos (e o índice) seria usar ...
git restore
(nãoreset --hard
ou o comando confusogit checkout
)Isso é:
Ou sua forma abreviada:
fonte
Eu tinha exatamente o mesmo problema: estava limpando minhas pastas, reorganizando e movendo arquivos. Entrei: git rm . e aperte enter; e então senti minhas entranhas se soltarem um pouco. Felizmente, eu não digitei o git commit -m "" imediatamente.
No entanto, o seguinte comando
restaurou tudo e salvou minha vida.
fonte