Перезаписал каталог.git, восстанавливая состояние из объектов

Я небрежно скопировал .git из одного проекта (A) в другой (B), с удаленным scp -r (A) (B),

Я хотел бы восстановить работоспособное состояние git-репо. Я могу удалить объекты.git (A). Оттуда, как я могу лучше всего найти советы по веткам Git и восстановить полезное состояние репо.

К сожалению, у меня нет другой копии (B), и моя ошибка стерла метаданные.

2 ответа

Ваша единственная проблема - восстановление ссылок. Все Bобъекты все еще там, но любой из Aимена (ветви, пульты, теги, ...), которые соответствуют B имена перезаписывают указатели объектов.

Начать с

git fsck --root

который покажет вам висячие коммиты и все корни, большинство проектов имеют только один, вы можете сделать git log --graph --decorate --oneline --ancestry-path $the $dangling $commits --not $the $roots, Поскольку копия также перезаписала ваши reflogs, если вы нажмете на все refs, это найдет всю вашу отсутствующую историю.

Для A вы можете просто клонировать свежую копию (если есть пульт) в новую папку "A_copy":

  • git clone <url> A_copy

или для конкретной отрасли:

  • git clone <url> -b some_branch A_copy

Затем возьмите папку.git из этой копии и поместите ее в свой "сломанный" A. Затем используйте git status чтобы увидеть, что изменилось.

Если вы хотите вернуться, либо просто используйте свой новый клон, либо вы можете сделать:

  • git reset HEAD --hard - это возвращает вас к состоянию головы.

Для B, если у вас есть хотя бы файлы и вы хотите превратить их в репозиторий, вы можете просто сделать следующее:

  • git init - делает папку git-репо
  • git add -A - обратите внимание, что это добавит все в эту папку, так что сначала приберитесь, если вам нужно, и, возможно, добавьте.gitingore, если требуется.
  • git commit -m "gehhh... had to start again :("
Другие вопросы по тегам