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
Ссылка:
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 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 был удален или поврежден. Это приводит к тому, что Git не знает вашей локальной истории и, следовательно, вызывает эту ошибку, когда вы пытаетесь отправить или получить данные из удаленного репозитория.
Вы создали новый репозиторий, добавили в него несколько коммитов, и теперь вы пытаетесь получить данные из удаленного репозитория, в котором уже есть несколько собственных коммитов. Git также выдаст ошибку в этом случае, поскольку он не знает, как связаны эти два проекта.
РЕШЕНИЕ
git pull origin master --allow-unrelated-stories
Ссылка - https://www.educative.io/edpresso/the-fatal-refusing-to-merge-unrelated-histories-git-error
Сначала перетащите удаленные изменения на свой локальный, используя следующую команду:
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
не сработало, но эту проблему для меня решает:
Я скопировал все файлы из репозитория рабочего стола в другую папку, а затем удалил папку.
Затем я снова клонирую репо, потому что это новый проект.
Когда я снова скопировал свои файлы и нажал, это сработало как шарм.
Я тоже боролся с этим, но сумел найти обходной путь.
Когда вы столкнетесь с ошибкой, описанной выше, просто выберите команду merge и затем продолжите ребазирование:
git cherry-pick -m 1 1234deadbeef1234deadbeef
git rebase --continue
Для гуглеров:
Если вы создали новое репо на GitHub и случайно инициализировали его с помощью README
или .gitignore
файлы.
Если вы обнаружили, что не можете выполнить слияние или переустановку, потому что .git
папка была повреждена.
Затем:
- Создать новую папку
git clone
- Вставьте все свои файлы в эту папку
Теперь у локального и удаленного будут "связанные истории", и они будут успешно объединяться или переставлять.
Ошибка устраняется переключением
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
надеюсь, это может помочь кому-то
Это также происходит, если у вас есть
Недавно я столкнулся с этой проблемой в своей настройке 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