restaurar após "git rm"

restaurar após "git rm"

Eu inicializei o repositório git some_dir_pathcom 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_pathestá 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 -fpara 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 rmnã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 rmfor confirmado, a git reset HEAD~será necessário.

Se o repositório estiver vazio após just git init, o git rmcomando é "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?

informação relacionada