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

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

Моя версия Git - 2.9.0. В предыдущей версии он работал нормально.

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

Shubham Chaudhary

Ответов: 25

Ответы (25)

git pull origin  --allow-unrelated-histories

Вы будете перенаправлены в окно редактирования Vim:

  • Вставить сообщение фиксации
  • Затем нажмите Esc (для выхода из режима «Вставка»), затем : (двоеточие), затем x (маленький «x») и, наконец, нажмите Введите, чтобы выйти из Vim
  • git push --set-upstream origin <ветка>

For this, enter the command:

git pull origin branchname --allow-unrelated-histories

For example,

git pull origin master --allow-unrelated-histories

Reference:

GitHub unrelated histories issue

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

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

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

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

git pull origin master --allow-unrelated-histories

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

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

git pull origin master  --allow-unrelated-histories

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

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

Использование флага - allow-unrelated-stories работало с запросом на вытягивание следующим образом:

git pull origin branchname --allow-unrelated-histories

Согласно примечания к выпуску 2.9.0 - git pull научился передавать опцию - allow-unrelated-stories в базовыйgit merge

Поскольку вы не можете ни толкать, ни тянуть, ни объединять-тянуть-толкать: -

  1. Вы можете создать новую ветку в репозитории GitHub.
  2. А потом: -
  3. git add.
  4. git commit -m 'commitName'
  5. И ссылка на эту ветку в вашем текущем каталоге в Терминале.
  6. git branch -m master имя ветки
  7. git push -f origin имя ветки
  8. Ваш код будет перенесен в новую ветку.
  9. А потом эти 2 ветки можно объединить.

У меня это сработало.

При выполнении git pullя получил это сообщение фатальный: отказ от слияния несвязанных историй для модуля репо, локальную копию которого я некоторое время не обновлял.

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

git reset --hard origin/master

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

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

git remote add origin 

Когда я пытался толкать или тянуть, я получал одну и ту же 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 --allow-unrelated-stories не сработало, но эту проблему для меня решает:

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

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

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

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

git pull origin branchname --allow-unrelated-histories

** в моем случае - название ветки.

После выполнения команды pull возникает конфликт. Вы должны разрешать конфликты. Я использую Android Studio для решения конфликтов. enter image description here

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

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

Для сотрудников Google:

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

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

Тогда:

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

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

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

Итак, вы получаете свою ошибку при выполнении 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.

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

git pull origin master --allow-unrelated-histories

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

The default behavior has changed since Git 2.9:

"git merge" used to allow merging two branches that have no common base by default, which led to a brand new history of an existing project created and then get pulled by an unsuspecting maintainer, which allowed an unnecessary parallel history merged into the existing project. The command has been taught not to allow this by default, with an escape hatch --allow-unrelated-histories option to be used in a rare event that merges histories of two projects that started their lives independently.

See the Git release changelog for more information.

You can use --allow-unrelated-histories to force the merge to happen.

I had the same problem. The problem is remote had something preventing this.

I first created a local repository. I added a LICENSE and README.md file to my local and committed.

Then I wanted a remote repository so I created one on GitHub. Here I made a mistake of checking "Initialize this repository with a README", which created a README.md in remote too.

So now when I ran

git push --set-upstream origin master

I got:

error: failed to push some refs to 'https://github.com/lokeshub/myTODs.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes
(e.g. hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Now to overcome this I did

git pull origin master

Which resulted in the below error:

From https://github.com/lokeshub/myTODs
branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories**

I tried:

git pull origin master --allow-unrelated-histories

Result:

From https://github.com/lokeshub/myTODs
 * branch            master     -> FETCH_HEAD
Auto-merging README.md
CONFLICT (add/add): Merge conflict in README.md
Automatic merge failed;
fix conflicts and then commit the result.

Solution:

I removed the remote repository and created a new (I think only removing file README could have worked) and after that the below worked:

git remote rm origin
git remote add origin https://github.com/lokeshub/myTODOs.git
git push --set-upstream origin master

WARNING THIS WILL POTENTIALLY OVERWRITE THE REMOTE REPOSITORY

This worked for me:

git push origin master --force

Для Android Studio и IntelliJ:

Сначала фиксирует все и разрешает любые конфликты.

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

git pull origin master --allow-unrelated-histories

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

Я пользуюсь rebase уже много лет и ни разу не сталкивался с такой проблемой. Однако ваша первая проблема заключается в том, что вы пытаетесь сделать это непосредственно в удаленной ветке development из удаленного репозитория, называемого origin. Это буквально неправильно, потому что rebase - опасная команда, которая перестраивает историю git. Сказав это, вы должны сначала попробовать свой локальный репозиторий и продвигать его только в том случае, если он работает для вас, как ожидалось.

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

  1. убедитесь, что у вас чистое рабочее дерево (нет незафиксированных изменений)
  2. checkout в ветку, которую вы хотите перебазировать (например, скажем, это master; как однострочная команда): git checkout master && git pull origin master && git checkout development
  3. Выполните фактическую перебазировку: git rebase master
  4. Если это сделано и все работает должным образом, отправьте его на свой пульт. Для этого вам нужно заставить его, потому что удаленный хост уже имеет историю в другом порядке, удаленный ответит, нечего нажимать. Итак, нам нужно сказать: «Моя локальная версия истории верна, перезаписать все в этой удаленной ветке, используя мою локальную версию истории»: git push -f origin development

Как я уже упоминал, имейте в виду, что rebase манипулирует историей git, что обычно плохо. Тем не менее, это можно сделать в ветках, где больше никто не берет на себя обязательств. Чтобы ветка оставалась доступной для других разработчиков, используйте другую стратегию слияния, такую ​​как слияние, сквош или Cherrypick. Другими словами: Rebase не должен быть вашим инструментом для распределенной разработки. Он отлично подойдет вам, если вы единственный, кто работает с этим репозиторием.

Мы используем стратегию функциональных веток. В этом случае я обычно использую rebase, чтобы получать «обновления» от других разработчиков, которые произошли в то же время в основной ветке. Таким образом уменьшается размер коммитов, отображаемых в запросе на перенос. Таким образом, рецензенту кода легче увидеть мои изменения, внесенные в эту ветку функций.

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

git pull origin branchName --allow-unrelated-histories

Посетите эту страницу для получения дополнительной информации.

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

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

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

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

1. Решаем проблему

Получить это Ошибка, когда git pull origin master?:

fatal: refusing to merge unrelated histories

Выполните одну из следующих команд (раньше она была главной, теперь ее основной) согласно сценарию

 git pull origin master --allow-unrelated-histories

 git pull origin main --allow-unrelated-histories
 

2. Значение

  • Ошибка:

Ошибка Git «фатальная: отказ от слияния несвязанных историй» возникает, когда два несвязанных проекта объединяются (т. Е. Проекты, которые не знают о существовании друг друга и имеют несовпадающие истории фиксации).

По умолчанию команда git merge отказывается объединять истории, не имеющие общего предка. Этот параметр можно использовать для отмены этой безопасности при объединении историй двух проектов, которые начали свою жизнь независимо.Поскольку это очень редкий случай, конфигурационная переменная для включения этого по умолчанию не существует и не будет добавлена.

enter image description here


Список литературы


Подробнее о StackOverflow

Попробуйте git pull --rebase development

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

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

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

git pull origin master --allow-unrelated-histories 

git push origin master

2022 WebDevInsider