Ответ 1
На это нельзя ответить в ближайшее время.
Предупреждение: вы не должны использовать флаг --allow-unrelated-histories
, если вы не знаете, что такое несвязанная история, и уверены, что она вам нужна. Эта проверка была введена только для предотвращения бедствий, когда люди по ошибке объединяют несвязанные проекты.
Насколько я понимаю, в вашем случае произошло следующее:
В какой-то момент вы клонировали проект 1
и внесли определенный вклад в разработку 2
. Между тем, проект развился до некоторой степени 3
.
Затем вы по какой-то причине потеряли свой локальный подкаталог .git, который содержал всю вашу историю от 1
до 2
. Вам удалось восстановить текущее состояние.
Но сейчас у него нет никакой истории - похоже, весь проект появился из ниоткуда. Если вы попросите Git объединить их, он не сможет сказать, где находятся ваши изменения, поэтому он может добавить их в удаленный проект, насколько я понимаю, он просто сообщит о массовых конфликтах добавления/добавления.
Вы должны найти обратно тот коммит 1
из удаленной истории, где вы клонировали проект (я полагаю, что вы не выполняли извлечение после этого; если вы это сделали, вам следует вместо этого искать последний зафиксированный вами извлеченный коммит). Затем вы должны изменить свою историю так, чтобы она начиналась с этого коммита 1, и тогда Git сможет корректно слиться (например, с pull).
Итак, шаги (при условии, что вы сейчас в восстановленном коммите без истории):
- оцените, где находится коммит
1
, из которого вы клонировали, как1?
, основываясь на времени фиксации, например - запустите
git diff _1?_..HEAD
и внимательно прочитайте. Убедитесь, что разница содержит только те изменения, которые вы внесли. Если он содержит больше, то вы должны были ошибиться1?
и вам нужно отрегулировать его и повторить этот шаг - после того, как вы нашли коммит
1
. Вы должны сделать это своим родителем; сделайтеgit --reset --soft _1_
, а затемgit commit
.
Теперь похоже, что вы клонировали из 1
, а затем сделали один коммит со всеми вашими изменениями. Ваша промежуточная история все равно теряется из-за вашего старого каталога .git
, но теперь вы можете запустить свой git pull
- он будет корректно сливаться.