Железо и софт • 11.06.2026
Git выдает ошибку fatal refusing to merge unrelated histories как исправить сбой
Создал локальный репозиторий Git на компьютере с Windows 11, добавил файлы проекта и сделал первый коммит. Затем создал пустой репозиторий на GitHub, связал их через команду git remote add origin и попытался стянуть изменения перед отправкой кода. Однако ошибка слияния веток в консоли Git Bash намертво прервала сессию и выдала критическую ошибку: fatal: refusing to merge unrelated histories. Программа наотрез отказывается объединять локальную ветку master и удаленную main, полностью блокируя дальнейшую работу. Подскажите, почему консольный клиент считает истории коммитов несвязанными и как принудительно заставить систему выполнить слияние двух репозиториев?
Ответы (5)
Артем Кодер
Здорово! Этот сбой — базовая защита Гита от случайного перезаписывания совершенно другого проекта. Ошибка unrelated histories наступает, когда два репозитория (твой локальный на ПК и удаленный на Гитхабе) имеют совершенно разные корневые коммиты и не знают о существовании друг друга. Чаще всего это происходит, если при создании репозитория на сайте ты поставил галочку Добавить файл README.md или .gitignore. В этот момент Гитхаб создал первый независимый коммит в сети, а твоя локальная папка имеет свою историю. Движок видит два разных начала проекта и блокирует пулл.
Марина Репо
Чтобы принудительно заставить Гит объединить две разные истории коммитов в один общий проект, вам нужно использовать специальный консольный флаг обхода защиты. Сделайте все строго по шагам:
1. Откройте консоль Git Bash в папке вашего текущего проекта.
2. Введите команду принудительного стягивания данных из удаленной ветки: `git pull origin main --allow-unrelated-histories` (если на Гитхабе ветка называется master, замените main на master).
3. Нажмите клавишу Enter. Консоль откроет встроенный текстовый редактор Vim для ввода комментария к коммиту слияния.
4. Закройте редактор Vim, последовательно нажав на клавиатуре клавишу Esc, затем введите двоеточие, буквы wq и нажмите Enter.
5. После успешного слияния отправьте файлы в сеть стандартной командой `git push -u origin main`.
Дмитрий Стек
Ребята, проверяйте еще названия ваших главных веток. Современный Гитхаб при создании репозитория по умолчанию называет основную ветку main, а локальный клиент Гита на компьютере при команде init ставит по старинке master. Когда вы пытаетесь сделать пулл, система сходит с ума, пытаясь скрестить две разные ветки с несвязанными историями. Измените локальное имя ветки командой `git branch -m master main`, свяжите указатели заново через upstream, и в большинстве случаев проблема решится даже без жестких флагов.
Никита Систем
Если метод слияния merge выдает жуткие конфликты в коде файлов README, гораздо чище будет применить перемещение локальной ветки поверх удаленной истории. Инструкция по настройке по шагам:
1. Убедитесь, что все локальные изменения сохранены и закоммичены.
2. Введите в терминале команду: `git fetch origin`, чтобы обновить индексы удаленного сервера.
3. Запустите процесс перебазирования ветки: `git rebase origin/main` (или origin/master).
4. Если возникнут конфликты в файлах, откройте их, удалите маркеры конфликтов, сохраните и введите `git rebase --continue`.
Этот шаг аккуратно переместит ваши локальные коммиты в самый конец цепочки Гитхаба, выстроив красивую линейную историю без лишних швов.
Роман Скрипт
Если на самом Гитхабе у тебя лежит пустой репозиторий, в котором кроме автогенерированного файла README ничего нет, не трать время на объединение историй коммитов. Просто сотри все, что создано на сервере, жестким пушем с локальной машины. Введите команду `git push -f origin main` (флаг -f означает force). Локальная рабочая папка принудительно сотрет сетевую заглушку main, пропишет твой коммит как единственный корневой, и ошибка исчезнет навсегда.