"отказ от слияния несвязанных историй" при попытке восстановить резервный репозиторий

У меня возникла проблема с Git push.

Раньше он успешно работал, но на этот раз не получилось. Вначале я учусь у своего хозяина MINGW64 /d/javasoft/apache-tomcat-7.0.70/webapps/MyNote (master), а затем

  • Я использую git remote add origin для связи с моим удаленным источником, но он предупреждает, что fatal: remote origin already exists.
  • затем я использую git remote rm origin (кто-то сказал мне), и все в порядке.
  • затем я снова использую git remote add origin https://github.com/***/***.git. Это нормально.
  • затем я использую git push -u origin master (я пробовал git push origin master, но по какой-то причине я потерял свое локальное целое .git, поэтому я думаю, что это может быть первый раз, когда мне нужно нажать, и я должен добавить -u). НО, это предупреждает error: failed to push some refs to 'https://github.com/***/***.git'
  • затем кто-то сказал мне, что я должен использовать git pull origin master, прежде чем использовать push, и я сделал это. НО, это предупредило: fatal: refusing to merge unrelated histories.
  • Я нашел некоторые ответы в Git, отказывающемся объединять несвязанные истории при rebase, но казалось, что это не сработало. В моей проблеме это предупредило fatal: Couldn't find remote ref –allow-unrelated-histories

Я действительно не знаю, как это сделать... Я просто хочу подтолкнуть...

Ответ 1

На это нельзя ответить в ближайшее время.

Предупреждение: вы не должны использовать флаг --allow-unrelated-histories, если вы не знаете, что такое несвязанная история, и уверены, что она вам нужна. Эта проверка была введена только для предотвращения бедствий, когда люди по ошибке объединяют несвязанные проекты.

Насколько я понимаю, в вашем случае произошло следующее:

В какой-то момент вы клонировали проект 1 и внесли определенный вклад в разработку 2. Между тем, проект развился до некоторой степени 3.

Enter image description here

Затем вы по какой-то причине потеряли свой локальный подкаталог .git, который содержал всю вашу историю от 1 до 2. Вам удалось восстановить текущее состояние.

Enter image description here

Но сейчас у него нет никакой истории - похоже, весь проект появился из ниоткуда. Если вы попросите Git объединить их, он не сможет сказать, где находятся ваши изменения, поэтому он может добавить их в удаленный проект, насколько я понимаю, он просто сообщит о массовых конфликтах добавления/добавления.

Вы должны найти обратно тот коммит 1 из удаленной истории, где вы клонировали проект (я полагаю, что вы не выполняли извлечение после этого; если вы это сделали, вам следует вместо этого искать последний зафиксированный вами извлеченный коммит). Затем вы должны изменить свою историю так, чтобы она начиналась с этого коммита 1, и тогда Git сможет корректно слиться (например, с pull).

Итак, шаги (при условии, что вы сейчас в восстановленном коммите без истории):

  • оцените, где находится коммит 1, из которого вы клонировали, как 1?, основываясь на времени фиксации, например
  • запустите git diff _1?_..HEAD и внимательно прочитайте. Убедитесь, что разница содержит только те изменения, которые вы внесли. Если он содержит больше, то вы должны были ошибиться 1? и вам нужно отрегулировать его и повторить этот шаг
  • после того, как вы нашли коммит 1. Вы должны сделать это своим родителем; сделайте git --reset --soft _1_, а затем git commit.

Enter image description here

Теперь похоже, что вы клонировали из 1, а затем сделали один коммит со всеми вашими изменениями. Ваша промежуточная история все равно теряется из-за вашего старого каталога .git, но теперь вы можете запустить свой git pull - он будет корректно сливаться.

Ответ 2

Попробуйте зафиксировать изменения в локальном репозитории, прежде чем отправлять их на GitHub.

Это может решить проблему (у меня была похожая проблема).