Попытка извлечь файлы из моего репозитория Github: «отказ от слияния несвязанных историй»


151

Я изучаю git и слежу за книгой сообщества Git.

Ранее (давно) я сделал публичный репозиторий на Github с некоторыми файлами. Теперь я установил локальный репозиторий Git на моем текущем компьютере и зафиксировал некоторые файлы. Затем я добавил удаленное указание на мою страницу Github:

[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C

Это казалось успешным:

[root@osboxes 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 на мой компьютер. Я сделал это:

[root@osboxes c]# git fetch learnc
[root@osboxes c]# git merge learnc/master
warning: refname 'learnc/master' is ambiguous.
Already up-to-date.

Тем не менее, я не вижу новых файлов в моем локальном каталоге. Как я могу получить их?

Я также попытался сделать это:

[root@osboxes c]# git pull learnc master
From https://github.com/michaelklachko/Learning-C
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

Кстати, локально я на главной ветке (других веток нет):

[root@osboxes c]# git status
On branch master
nothing to commit, working directory clean

4
Когда вы настраивали локальное репо, вы клонировали репозиторий Github или только что сделали git init? В последнем случае эти репо не связаны (не имеют общих коммитов), и вы не можете объединить их (pull is fetch + merge).
Пол

Я сделал git init. Так я должен клонировать мой репозиторий Github, чтобы это исправить?
MichaelSB

1
Вы можете клонировать репозиторий Github и продолжить работу с ним, но он все равно будет отдельным репо. Вы хотите объединить две несвязанные истории вместе?
Пол

Я предполагаю, что хочу объединить истории, но на самом деле я просто хочу объединить файлы как локально, так и на github. Я имею в виду, что меня не волнует история старых файлов, которые у меня есть на Github.
MichaelSB

Ответы:


315

Пытаться --allow-unrelated-histories

Как прокомментировал max630, или как объяснено здесь Git отказывается объединять несвязанные истории



Почему нет опции конфигурации, чтобы всегда установить это? Каждый раз, когда мне приходится выслеживать эту опцию; Я работаю с git с 2k8 и очень раздражен этой няней. Глупый вариант не всегда был там. По крайней мере сообщение об отказе должно включать переопределение для использования.
Ноя

98
git checkout master
git merge origin/master --allow-unrelated-histories

Разрешите конфликт, тогда

git add -A .
git commit -m "Upload"
git push

1
Спасибо за разработку вышеуказанного решения.
Рахул Радж

39

Хотя я полностью за то, чтобы разблокировать рабочие вопросы людей, я не думаю, что «push --force» или «--allow_unrelated_histories» следует преподавать новым пользователям как общие решения, потому что они могут вызвать реальный хаос в хранилище, когда кто-то их использует не понимаю, почему вещи не работают в первую очередь.

Если у вас есть такая ситуация, когда вы начали с локального репозитория и хотите создать удаленный доступ на GitHub, чтобы поделиться своей работой, есть что-то, на что следует обратить внимание.

Когда вы создаете новый онлайн-репозиторий, появляется опция «Инициализировать этот репозиторий с помощью README». Если вы прочитаете мелкий шрифт, появится надпись «Пропустите этот шаг, если вы импортируете существующее хранилище».

Возможно, вы отметили этот флажок. Или, аналогично, вы сделали добавление / фиксацию в Интернете, прежде чем пытаться сделать первоначальный толчок. Что происходит, вы создаете уникальную историю коммитов в каждом месте, и они не могут быть согласованы без специального разрешения, упомянутого в ответе Nevermore (потому что git не хочет, чтобы вы работали таким образом). Вы можете следовать некоторым советам, упомянутым здесь, или просто не проверять эту опцию в следующий раз, когда вы захотите связать некоторые локальные файлы с новым пультом дистанционного управления; поддерживая пульт в чистоте для этого начального толчка.

Справка: мой первый опыт работы с git + hub состоял в том, чтобы столкнуться с этой же проблемой и многое узнать, чтобы понять, что произошло и почему.


12

Если на одном конце нет существенной истории (иначе говоря, это просто один коммит readme на конце github), мне часто проще вручную скопировать readme в мое локальное хранилище и git push -fсделать мою версию новой корневой фиксацией ,

Я считаю, что это немного менее сложно, не требует запоминания неясного флага и сохраняет историю немного чище.


11

На вашей ветке - скажи мастер, тяни и разрешай несвязанные истории

git pull origin master --allow-unrelated-histories

Работал на меня.


1
Эта команда нужна для добавления лицензии или ReadMe при создании исходного репозитория в Github.
F1Linux

4

Выполните следующую команду:

git pull origin master --allow-unrelated-histories

Слияние Vim откроется. Добавьте некоторое слияние сообщение и:

  1. Нажмите ESC
  2. Нажмите Shift + ';'
  3. Нажмите «w», а затем нажмите «q».

И тебе хорошо идти.


3

Когда я использовал --allow-unrelated-histories, эта команда вызвала слишком много конфликтов. Были конфликты в файлах, над которыми я даже не работал. Чтобы преодолеть ошибку " Refusing to merge unrelated histories", я использовал следующую команду rebase:

git pull --rebase=preserve --allow-unrelated-histories

После этой фиксации незафиксированные изменения с сообщением фиксации. Наконец, выполните следующую команду:

git rebase --continue

После этого моя рабочая копия была обновлена ​​с удаленной копией, и я смог отправить свои изменения, как и раньше. Нет больше ошибок, связанных с историей во время вытягивания.


1
Фактическая версия: git pull --rebase=merge --allow-unrelated-historiesв --rebase=preserveосуждается git-scm.com/docs/git-pull#Documentation/...
Luckylooke

0

В моем случае возникла та же проблема, особенно первая попытка запроса по запросу после удаленного добавления Git-репозитория. Следующая ошибка столкнулась.

fatal: refusing to merge unrelated histories on every try

Используйте команду --allow-unrelated-histories. Работает отлично.

git pull origin branchname --allow-unrelated-histories
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.