← Назад к списку
Железо и софт • 06.06.2026

Git выдает ошибку fatal refusing to merge unrelated histories как исправить

Пытаюсь связать свой локальный проект на Windows 11 с новым репозиторием на GitHub. Сначала инициализировал репозиторий на компьютере, добавил все файлы исходного кода и сделал первый коммит. Затем создал проект на сайте, привязал адрес через remote add origin и попытался сделать git pull, чтобы обновить индексы перед отправкой. Но консоль 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`.
Дмитрий Стек
Ребята, очень часто эта заминка происходит из-за банальной путаницы в современных стандартах именования веток. На вашем локальном компьютере Гит при инициализации репозитория командой init по старинке создает ветку master. А сайт GitHub при создании пустого репозитория сейчас автоматически генерирует основную ветку под именем main. Когда вы пытаетесь сделать пулл, система сходит с ума, пытаясь скрестить две разные ветки с несвязанными историями. Измените локальное имя ветки командой `git branch -m master main`, свяжите указатели заново через remote, и в большинстве случаев проблема решится.
Никита Консоль
Если на самом Гитхабе у вас создан абсолютно пустой репозиторий, в котором кроме автогенерированного файла README ничего важного нет, не тратьте время на объединение и выстраивание цепочек коммитов. Проще всего решить проблему радикально — принудительно переписать удаленную историю своей локальной базой. Пропишите в консоли команду: `git push -f origin main` (или `origin master`, смотря как названа ветка). Ключ `-f` (force) заставит сервер намертво стереть сетевую заглушку, прописав ваш локальный коммит как единственный корневой, и ошибка исчезнет.
Роман Скрипт
Если стандартный метод слияния pull/merge выдает жуткие конфликты в коде файлов разметки, гораздо чище и красивее будет применить операцию перемещения локальной ветки поверх удаленной истории по инструкции:
1. Убедитесь в терминале, что все ваши текущие локальные изменения файлов сохранены и закоммичены.
2. Введите команду обновления сетевых индексов удаленного сервера: `git fetch origin` и нажмите Enter.
3. Запустите интерактивный процесс перебазирования вашей ветки поверх сетевой: `git rebase origin/main` (или `origin/master`).
4. Если система споткнется о файлы README, откройте их в VS Code, удалите маркеры конфликтов, сохраните документы и введите: `git rebase --continue`.
Этот шаг аккуратно перенесет ваши локальные коммиты на самый верх цепочки Гитхаба, выстроив красивую линейную историю без лишних швов.

Ваш ответ