Вообще говоря, не трогайте каталог .git/
.Используйте команды git
(в идеале высокоуровневые «фарфоровые» команды больше, чем низкоуровневые «слесарные» команды) и пусть it изменяет то, что в .git/
.
Что еще более важно, не запускайте команды, которые вы не понимаете .Слепое копирование и вставка команд - хороший способ попасть в неприятности. Да , задавайте вопросы. Да , поиск в интернете.Но прежде чем использовать то, что вы найдете, прочитайте об этом .Вы хотите знать, что он должен делать, прежде чем попробовать.Это особенно важно для любой команды, включающей sudo
, но в целом это хороший совет.Я попытаюсь четко объяснить каждую команду, которую я предлагаю запустить ниже.Если вы не понимаете одного из них, , пожалуйста, посмотрите соответствующую документацию или попросите разъяснений .
Хорошо, теперь давайте посмотрим, сможем ли мы выйти из этого беспорядка.Вы говорите, что у вас есть резервная копия старого каталога .git/
.Это должно содержать всю вашу старую историю.Создайте резервную копию нового .git/
и верните старый .git/
, затем запустите git log
, чтобы просмотреть историю вашего региона.Надеюсь, вы увидите ваши старые коммиты.
Затем запустите git status
.Я думаю, вы найдете кучу измененных файлов.Запустите git diff
, чтобы увидеть разницу между вашей рабочей копией и вашим последним коммитом.Это должны быть все изменения, которые вы внесли с тех пор, как вы впервые удалили каталог .git/
.
Если эти изменения составляют один логический коммит, замечательно.Вы можете добавить их и зафиксировать как обычно.Если они должны быть несколькими коммитами, вы можете сделать несколько коммитов.Если у вас есть несколько коммитов во втором каталоге .git/
, который вы хотите сохранить, вы можете добавить его как file://
удаленный, получить ветку и выполнить слияние / перебазирование / выбор вишни.Эта часть, очевидно, очень зависит от того, что у вас есть и что вам нужно.
Наконец, когда вы увидите, чего ожидаете в git log
, вам придется вернуться на GitHub.Еще раз, вам нужно будет сделать принудительный толчок.Вообще говоря, принудительное нажатие - опасная операция (как вы узнали), поэтому будьте осторожны при ее использовании¹.В этом случае это, вероятно, имеет смысл.
¹ В большинстве случаев --force-with-lease
предпочтительнее --force
.В этом случае я не думаю, что загрузка старых ссылок из GitHub для --force-with-lease
работы стоит.