Как «только для чтения» восстановить локальный GIT-репозиторий и ссылки на файлы после удаления папки .git? - PullRequest
0 голосов
/ 23 мая 2018

В качестве средства резервного копирования я помещаю структуру папок в репозиторий GIT, периодически внося новые изменения.В данном случае это большая часть папки $ HOME моего пользователя Linux.Поскольку резервная копия также включает локальные папки различных приложений (таких как почтовый клиент, браузеры и т. Д.), Естественно, даже через несколько секунд после недавнего git-push появляется целый ряд новых и незафиксированных изменений.

Так получилось, что я случайно уничтожил свою папку ~/.git/ (перезаписал ее папкой ~/.git/ из другого хранилища, так что она действительно исчезла).Я хотел бы восстановить его путем своего рода клонирования истории GIT с удаленного компьютера и сохранения связи всех файлов с их контрагентом хранилища, но не хочу, чтобы локальные файлы перезаписывались git-clone или git-pull.Я попытался восстановить папку .git/, выполнив этот ответ , используя версию git fetch затем git reset.Все четыре команды завершены без ошибок.Однако, что касается моего локального репозитория, я застреваю в состоянии неопределенности:

  • git branch -av показывает правильный удаленный мастер с правильным последним коммитом там - но только это;в списке нет локальной ветви / мастера.

  • git status показывает:

    On branch master
    
    Initial commit
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
        [...]
    

    Локальные файлы изменились с момента последней фиксации иgit-push не включается в список.

  • git log показывает: fatal: your current branch 'master' does not have any commits yet

  • Я пытался сохранить локальные изменения, чтобыпотяните и снова примените тайник;однако git stash save приводит к:

    fatal: bad revision 'HEAD'
    fatal: bad revision 'HEAD'
    fatal: Needed a single revision
    You do not have the initial commit yet
    
  • git checkout master прерывается с:

    error: The following untracked working tree files would be overwritten by checkout:
        [...]
        [... looooong list of files and folders ...]
        [...]
    Please move or remove them before you can switch branches.
    Aborting
    
  • git rev-parse --abbrev-ref HEAD приводит к "HEAD "- он должен вывести имя ветви или" master ", если все было в порядке (я использую эту команду, чтобы текущее имя ветви отображалось в приглашении bash).

Может ли кто-нибудь указать мне полезное руководство о том, как «восстановить» локальный репозиторий и все ссылки на файлы без перезаписи (незафиксированных) изменений?Чего не хватает в ответе из другой темы ?

1 Ответ

0 голосов
/ 23 мая 2018

Один трюк заключается в том, чтобы рассматривать ваше текущее поврежденное репо (с отсутствующим .git) рабочим деревом (где находятся ваши измененные файлы)

Клонировать репо в другом месте, а затем добавлять файлы изПервое рабочее дерево во втором клонированном репо:

cd /path/to/second/cloned/repo
git --work-tree=/path/to/first/repo add .
git commit -m "import work in progress"
git push
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...