Eu inicializei o repositório git some_dir_path
com git init
. Depois disso, decidi não incluir todos os arquivos no repositório e emiti o arquivo git rm -f
. Como pensei, isso removeria todos os arquivos do repositório git, não do diretório em si. E agora, isso some_dir_path
está vazio, exceto o próprio .git:
ls -aR some_dir_path:
.git:
branches config description HEAD hooks index info objects refs
...
Então, a questão é se existe alguma maneira de recuperar os dados?
Eu não tive commits emitidos e nenhuma ramificação antes git rm -f
para restaurar.
Responder1
Como nenhum dos arquivos foi confirmado, eles estão perdidos.
Se eles tivessem sido cometidos, você teria se recuperado emitindo
git reset --hard
Isso teria restaurado os arquivos removidos (e revertido quaisquer alterações feitas em outros arquivos) desde o último commit.
Veja também git reset --help
.
Responder2
O git rm
não foi confirmado, então o procedimento é bastante simples:
Ponto de partida: foi adicionado um "onefile":
$ git cat-file -p HEAD:onefile
content...
$ cat onefile
content...
Agora o git rm
:
$ git rm -f onefile
rm 'onefile'
$ ls
O arquivo realmente desapareceu. O comando git não foi confirmado. (A linha rm 'onefile'
ésaída, não é um comando!)
O conselho é fácil aqui e agora: não entre em pânico, obtenha uma visão geral:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: onefile
Então, seguindo a dica:
$ git reset HEAD *
Unstaged changes after reset:
D onefile
A exclusão passou de não confirmada para não preparada.
$ git archive HEAD -o playback.tar
$ tar xf playback.tar --to-stdout
content...
Se git rm
for confirmado, a git reset HEAD~
será necessário.
Se o repositório estiver vazio após just git init
, o git rm
comando é "seguro":
$ git rm *
fatal: pathspec '*' did not match any files
O Q esconde o que aconteceu entre init e rm. Deve ter sido git add?