Git отказывается объединять несвязанные истории при ребазе

В течение git rebase origin/development следующее сообщение об ошибке отображается из git:

fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef

Моя версия git 2.9.0. Раньше нормально работал в предыдущей версии.

Как я могу продолжить эту перебазирование, разрешив несвязанные истории с принудительным флагом, введенным в новом выпуске?

38 ответов

Поведение по умолчанию изменилось с git 2.9:

"git merge" используется, чтобы разрешить объединение двух веток, которые по умолчанию не имеют общей базы, что привело к созданию совершенно новой истории существующего проекта, а затем было получено ничего не подозревающим сопровождающим, что позволило слить ненужную параллельную историю с существующим проектом, Команда научена не разрешать это по умолчанию с помощью аварийного люка --allow-unrelated-histories Опция, которая будет использоваться в редких случаях, когда объединяются истории двух проектов, которые начали свою жизнь независимо.

Смотрите журнал изменений git для получения дополнительной информации.

Ты можешь использовать --allow-unrelated-histories заставить слияние произойти.

В моем случае ошибка была просто fatal: refusing to merge unrelated histories на каждый, особенно первый запрос на удаление, после удаленного добавления git-репо.

С помощью --allow-unrelated-histories флаг работал с запросом на получение таким образом:

git pull origin branchname --allow-unrelated-histories

Попробуйте следующую команду

git pull origin master --allow-unrelated-histories

это должно решить вашу проблему.

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

git remote add origin <repository url>

Когда я пытался толкать / тянуть, я получил то же самое fatal: unrelated_histories ошибка. Вот как я это исправил:

git pull origin master --allow-unrelated-histories
git merge origin origin/master
... add and commit here...
git push origin master

Ошибка при выполнении git pull origin master:

      fatal: refusing to merge unrelated histories

Решил эту команду

      git pull origin master --allow-unrelated-histories

Для этого введите команду:

git pull origin branchname --allow-unrelated-histories

например:

git pull origin master --allow-unrelated-histories

Ссылка:

Github проблема, связанная с историями

git pull origin <branch> --allow-unrelated-histories

Вы будете перенаправлены на Vim Edit

  • Вставить сообщение коммита
  • Затем нажмите Ctrl+X, чтобы выйти из VIM
  • git push --set-upstream origin <branch>

Я выполнил эту команду, и проблема была решена.

git pull origin branchName --allow-несвязанные-истории

У меня была такая же проблема. Попробуй это:

git pull origin master --allow-unrelated-histories 

git push origin master

Для Android Studio и IntelliJ:

Во-первых, зафиксируйте все и разрешите любые конфликты.

Затем откройте терминал снизу IDE и введите:

git pull origin master --allow-unrelated-histories

Теперь можно толкать.

Пытаться git pull --rebase development

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

Итак, вы получаете ошибку, делая git rebase:

$ git rebase origin/development
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef

Эта ошибка на самом деле не отменяет перебазирование, но вы сейчас в середине:

$ git status
interactive rebase in progress; onto 4321beefdead
Last command done (1 command done):
   pick 1234deadbeef1234deadbeef test merge commit

Теперь вы можете выполнить слияние вручную. Узнайте родительские коммиты исходного коммита слияния:

$ git log -1 1234deadbeef1234deadbeef
commit 1234deadbeef1234deadbeef
Merge: 111111111 222222222
Author: Hans Dampf
Date:   Wed Jun 6 18:04:35 2018 +0200

    test merge commit

Узнайте, какой из двух родителей слияния является тем, который был объединен с текущим (вероятно, вторым, проверьте с помощью git log 222222222), а затем выполните слияние вручную, скопировав сообщение коммита исходного коммита слияния:

$ git merge --allow-unrelated 222222222 --no-commit
Automatic merge went well; stopped before committing as requested
$ git commit -C 1234deadbeef1234deadbeef
[detached HEAD 909af09ec] test merge commit
 Date: Wed Jun 6 18:04:35 2018 +0200
$ git rebase --continue
Successfully rebased and updated refs/heads/test-branch.

Две возможности, когда это может произойти -

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

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

РЕШЕНИЕ

git pull origin master --allow-unrelated-stories

Ссылка - https://www.educative.io/edpresso/the-fatal-refusing-to-merge-unrelated-histories-git-error

Это сработало для меня:

git push origin master --force

Я только что сделал

  git pull --allow-unrelated-histories

Сначала перетащите удаленные изменения на свой локальный, используя следующую команду:

git pull origin branchname --allow-unrelated-histories

** имя ветки является основным в моем случае.

Когда команда pull выполнена, возникает конфликт. Вы должны разрешать конфликты. Я использую Android Studio для решения конфликтов.

Когда конфликты разрешены, слияние завершено!

Теперь можно смело толкать.

Обычно это происходит при первой фиксации в удаленном репозитории. Поскольку в ошибке четко указано "отказ от объединения несвязанных историй", нам нужно использовать флаг --allow-unrelated-stories.

git pull origin master  --allow-unrelated-histories

Теперь возникнут конфликты, которые придется решать вручную. После этого просто зафиксируйте код и нажмите его.

У меня такая же проблема. Проблема удаленная, что-то мешало этому. Я сначала создал локальный репо. Я добавил ЛИЦЕНЗИЮ и README.md в свой локальный и коммит. Тогда я хотел удаленного репо, поэтому я создал его на Github. Здесь я сделал ошибку, отметив "Инициализировать этот репозиторий с помощью README", что также привело к созданию README.md в удаленном режиме.

Так что теперь, когда я запустил git push --set-upstream master master
Я получил:
ошибка: не удалось отправить некоторые ссылки на подсказку https://github.com/lokeshub/myTODs.git: обновления были отклонены, поскольку подсказка текущей ветви находится за подсказкой: ее удаленный аналог. Интегрируйте удаленные изменения (например, подсказка: "git pull...") перед повторным нажатием. Подсказка: подробности см. в "Примечании о быстрой перемотке вперед" в "git push --help".

Теперь, чтобы преодолеть это, я сделал
мастер происхождения git pull
Что привело к ошибке ниже
С https://github.com/lokeshub/myTODs * master master -> FETCH_HEAD роковой: отказ от слияния несвязанных историй

Я старался:
мастер происхождения git pull - мелкие-не связанные истории
результат:
С https://github.com/lokeshub/myTODs * мастер ветвления -> FETCH_HEAD CONFLICT автоматического объединения README.md (добавить / добавить): конфликт слияния в README.md Ошибка автоматического объединения; исправить конфликты, а затем зафиксировать результат.

Решение:
Я удалил удаленный репозиторий и создал новый (я думаю, что только удаление README могло бы работать), и после этого работало ниже
git remote rm origin
git remote добавить источник https://github.com/lokeshub/myTODOs.git
git push - set-upstream master origin

При выполнении git pull, Я получил это сообщение fatal: refusing to merge unrelated historiesдля модуля репо, локальную копию которого я некоторое время не обновлял.

Я запустил эту команду только для того, чтобы обновить локальную версию из источника. Я просто хотел получить последние новости с удаленного компьютера и не нуждался в каких-либо локальных изменениях.

git reset --hard origin/master

Это исправило это в моем случае.

Я старался git pull --allow-unrelated-histories не сработало, но эту проблему для меня решает:

  1. Я скопировал все файлы из репозитория рабочего стола в другую папку, а затем удалил папку.

  2. Затем я снова клонирую репо, потому что это новый проект.

  3. Когда я снова скопировал свои файлы и нажал, это сработало как шарм.

Я тоже боролся с этим, но сумел найти обходной путь.

Когда вы столкнетесь с ошибкой, описанной выше, просто выберите команду merge и затем продолжите ребазирование:

git cherry-pick -m 1 1234deadbeef1234deadbeef
git rebase --continue

Для гуглеров:

Если вы создали новое репо на GitHub и случайно инициализировали его с помощью README или .gitignore файлы.

Если вы обнаружили, что не можете выполнить слияние или переустановку, потому что .git папка была повреждена.

Затем:

  • Создать новую папку
  • git clone
  • Вставьте все свои файлы в эту папку

Теперь у локального и удаленного будут "связанные истории", и они будут успешно объединяться или переставлять.

Ошибка устраняется переключением выключатель. После команды git pull или git merge добавьте следующий тег:

      git pull origin master --allow-unrelated-histories

После этого может возникнуть конфликт. Итак, разрешите конфликт и зафиксируйте его. Для меня это работа.

git pull origin main --allow-unrelated-history

это нормально для меня в github

В моем случае я хотел объединить несвязанную ветку истории с моей текущей:

      git merge <-unrelated-history-branch-name> --allow-unrelated-histories

Я столкнулся с той же проблемой: вот что я сделал:

git pull origin main --allow-unrelated-histories

Я использовал VsCode для разрешения конфликтов слияния, а затем сделал:

git commit -m "commit message"

git push origin main

Я вижу, что ответ, получивший наибольшее количество голосов, не решает этот вопрос, что касается перебазирования.

Единственный способ синхронизировать две расходящиеся ветки - это объединить их вместе, в результате чего получится дополнительный коммит слияния и два набора коммитов, содержащих одинаковые изменения (исходные и те, что из вашей перебазированной ветки). Излишне говорить, что это очень запутанная ситуация.

Итак, прежде чем бежать git rebase, всегда спрашивайте себя: "Кто-нибудь еще смотрит на эту ветку?" Если ответ положительный, уберите руки с клавиатуры и подумайте о неразрушающем способе внесения изменений (например, git revertкоманда). В противном случае вы можете переписывать историю сколько угодно раз.

Ссылка: https://www.atlassian.com/git/tutorials/merging-vs-rebasing#the-golden-rule-of-rebasing

Если кто-то сталкивается с той же проблемой при перебазировании ветки после выполнения--allow-unrelated-historiesтакже, пожалуйста, используйте этоgit pull origin <branch-name> --allow-unrelated-histories --no-ffнадеюсь, это может помочь кому-то

Это также происходит, если у вас есть git клон репозитория.

Недавно я столкнулся с этой проблемой в своей настройке CI/CD, ни одно из вышеперечисленных решений не помогло мне. Я строил конвейер CI / CD для анализа кода при создании MR по исходной ветке MR, для этого мне нужно один раз запустить анализ в основной ветке, а затем в исходной ветке MR, объединенной с основной, я получил эту ошибку при попытке слияния ответвления через команда.

Причина, по которой это происходит в настройке CI/CD : обычно в среде CI/CD репозитории git представляют собой неглубокий клон для ускорения работы, который не включает полную историю коммитов, из-за чего при слиянии git может подумать, что мы пытаемся объединить несвязанные ветки, что на самом деле неверно.

Решение . Преобразуйте поверхностный репозиторий в немелкий с помощью следующей команды:

      git fetch --unshallow

Думаю, это довольно редкий сценарий; Вы удалили пульт (например,origin):

      git remote rm origin

Затем через некоторое время вы по какой-то причине попытались добавить его обратно, но ввели неправильный URL.

      git remote add origin git@github.com:example/wrong.git

Решение, конечно, состоит в том, чтобы использовать правильный URL:

      git remote add origin git@github.com:example/correct.git
Другие вопросы по тегам