восстановить после "git rm"

восстановить после "git rm"

Я инициализировал git repo some_dir_pathс помощью git init. После этого я решил не включать все файлы в repo и выполнил git rm -f. Как я и думал, это удалит все файлы из git repo, а не из самого каталога. И теперь это some_dir_pathпусто, за исключением самого .git:

ls -aR some_dir_path:
.git:
branches  config  description  HEAD  hooks  index  info  objects  refs
...

Итак, вопрос в том, есть ли способ вернуть данные?
У меня не было никаких коммитов и веток, git rm -fиз которых можно было бы восстановиться.

решение1

Поскольку ни один из файлов не был передан, они теперь утеряны.

Если бы они были совершены, вы бы оправились, выпустив

git reset --hard

Это восстановило бы удаленные файлы (и отменило бы все изменения, внесенные в другие файлы) с момента последнего коммита.

Смотрите также git reset --help.

решение2

Поскольку транзакция git rmне была совершена, процедура довольно проста:

Начальная точка: добавлен «onefile»:

$  git cat-file -p HEAD:onefile         
content...
$  cat onefile
content...

Сейчас git rm:

$  git rm -f onefile 
rm 'onefile'
$  ls        

Файл действительно пропал. Команда git не зафиксирована. ( rm 'onefile'Строкавыход, а не приказ!)

Совет прост здесь и сейчас: не паникуйте, получите общее представление:

$  git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    onefile

Итак, следуя подсказке:

$  git reset HEAD *
Unstaged changes after reset:
D       onefile

Удаление перешло из категории «незавершённое» в категорию «неподготовленное».

$  git archive HEAD -o playback.tar
$  tar xf playback.tar --to-stdout
content...

Если git rmбудет совершено, то git reset HEAD~потребуется а.

Если после всего этого репозиторий пуст git init, git rmкоманда «безопасна»:

$  git rm * 
fatal: pathspec '*' did not match any files

Q скрывает то, что произошло между init и rm. Должно быть, это было git add?

Связанный контент