Перезаписал каталог.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 :("