Как я могу восстановить историю Git из резервной копии после удаления папки .git? - PullRequest
0 голосов
/ 09 апреля 2019

Я испортил свой проект и часами пытался его исправить.Я сдался, удалил его, а затем должен был загрузить тот, который у меня есть, на моем GitHub.Я распаковал файл и запустил его на единстве, снова проделав большую работу.Затем я захотел зафиксировать его в GitHub, и у меня возникла ошибка Git, когда я попытался нажать, поэтому я воспользовался советом этого парня, который сказал мне:

  1. Удалить каталог .git/ из папки.Затем выполните эти команды:
  2. git init
  3. git add .
  4. git commit -m "First Commit"
  5. git remote add origin [url]
  6. git push -u origin master

Когда я удалил .git/ и поместил папку в репо, она избавилась от истории коммитов.Я пытался найти решения, подобные git reset --hard b1719639, но я не могу вернуться к своим предыдущим коммитам, так как они пропали, так как я удалил свой .git/ из папки при фиксации.У меня все еще есть папка .git/.

Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Вообще говоря, не трогайте каталог .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 работы стоит.

0 голосов
/ 09 апреля 2019

Скорее всего, вы не сможете восстановить историю. Однако, когда вы запустили git init, ваше локальное репо было повторно инициализировано в HEAD репозитория github. На этом этапе, если вы запустите git status, вы все равно увидите изменения между github HEAD и вашим текущим статусом. Убедитесь, что вы совершаете и подталкиваете их. Не проверять и не сбрасывать , иначе вы можете потерять все навсегда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...