Ответ 1
Попробуйте --allow-unrelated-histories
Как и max630, или как объяснено здесь Git отказ от объединения несвязанных историй
Я изучаю git, и я следую сообществу сообщества Git.
Ранее (давным-давно) я создал публичный репозиторий на Github с некоторыми файлами. Теперь я настроил локальный репозиторий Git на моем текущем компьютере и зафиксировал некоторые файлы. Затем я добавил удаленный указатель на мою страницу Github:
[[email protected] c]# git remote add learnc https://github.com/michaelklachko/Learning-C
Это казалось успешным:
[[email protected] c]# git remote show learnc
* remote learnc
Fetch URL: https://github.com/michaelklachko/Learning-C
Push URL: https://github.com/michaelklachko/Learning-C
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (local out of date)
Теперь я хочу загрузить файлы с моего репозитория Github на свой компьютер. Я сделал это:
[[email protected] c]# git fetch learnc
[[email protected] c]# git merge learnc/master
warning: refname 'learnc/master' is ambiguous.
Already up-to-date.
Однако я не вижу новых файлов в локальном каталоге. Как я могу их получить?
Я также пытался это сделать:
[[email protected] c]# git pull learnc master
From https://github.com/michaelklachko/Learning-C
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
Кстати, локально я на главной ветке (других ветвей нет):
[[email protected] c]# git status
On branch master
nothing to commit, working directory clean
Попробуйте --allow-unrelated-histories
Как и max630, или как объяснено здесь Git отказ от объединения несвязанных историй
git checkout master
git merge origin/master --allow-unrelated-histories
Устранить конфликт, затем
git add -A .
git commit -m "Upload"
git push
В то время как я все для разблокирования проблем с работой людей, я не думаю, что "push -force" или "--allow_unrelated_histories" следует научить новых пользователей в качестве общих решений, поскольку они могут вызвать реальный хаос в репозитории, когда один использует их, не понимая, почему вещи не работают в первую очередь.
Если у вас есть такая ситуация, когда вы начали с локального репозитория, и хотите сделать удаленный доступ к GitHub для совместной работы с вами, вам стоит позаботиться.
Когда вы создаете новый онлайн-репозиторий, есть опция "Инициализировать этот репозиторий с помощью README". Если вы прочитали мелкий шрифт, в нем говорится: "Пропустите этот шаг, если вы импортируете существующий репозиторий".
Возможно, вы отметили это поле. Или аналогичным образом вы сделали добавление/фиксацию в Интернете до того, как вы попытаетесь выполнить начальный толчок. Что происходит, вы создаете уникальную историю фиксации в каждом месте, и их нельзя согласовать без специального разрешения, упомянутого в ответе Nevermore (потому что git не хочет, чтобы вы так поступали). Вы можете следовать приведенным здесь советам или просто просто не проверять этот параметр в следующий раз, когда хотите связать некоторые локальные файлы с новым удаленным; удерживая пульт дистанционного управления для этого первоначального нажатия.
Ссылка: мой первый опыт работы с git + хабом заключался в том, чтобы столкнуться с этой проблемой и сделать много обучения, чтобы понять, что произошло и почему.
Если на одном конце нет существенной истории (например, если это всего лишь одно коммит-чтение в конце github), мне часто легче вручную копировать readme в локальное репо и делать git push -f
, чтобы сделать моя версия - новый корень.
Я считаю, что он немного менее сложный, не требует запоминания неясного флага и сохраняет историю немного чище.
На вашей ветке - скажи мастер, тяни и разрешай несвязанные истории
git pull origin master --allow-unrelated-histories
Работал на меня.
Когда я использовал --allow-unrelated-histories
, эта команда вызвала слишком много конфликтов. Были конфликты в файлах, над которыми я даже не работал. Чтобы преодолеть ошибку " Refusing to merge unrelated histories"
, я использовал следующую команду rebase:
git pull --rebase=preserve --allow-unrelated-histories
После этой фиксации незафиксированные изменения с сообщением фиксации. Наконец, выполните следующую команду:
git rebase --continue
После этого моя рабочая копия была обновлена с удаленной копией, и я смог отправить свои изменения, как и раньше. Нет больше ошибок, связанных с историей во время вытягивания.
Выполните следующую команду:
git pull origin master --allow-unrelated-histories
Слияние Vim откроется. Добавьте некоторое слияние сообщение и:
И тебе хорошо идти.
Это сработало для меня:
мастер происхождения git push --force