Git WindowsLinuxmacOSGit

Git: Команда git pull останавливается из-за расходящихся веток

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Команда git pull сообщает, что локальная и удалённая ветви разошлись: с обеих сторон есть собственные коммиты. Git должен выбрать слияние или перенос локальных коммитов, а автоматическое действие не всегда задано. Это не сетевая ошибка и не повод удалять репозиторий.

В этой статье
  1. Как проявляется ошибка и когда применим способ
  2. Причины и признаки
  3. Пошаговая диагностика и решение
  4. Проверка результата и действия при повторении

#Как проявляется ошибка и когда применим способ

Команда git pull сообщает, что локальная и удалённая ветви разошлись: с обеих сторон есть собственные коммиты. Git должен выбрать слияние или перенос локальных коммитов, а автоматическое действие не всегда задано. Это не сетевая ошибка и не повод удалять репозиторий.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Не выбран способ объединенияНастройка pull.rebase или режим --ff-only не позволяют автоматически разрешить расходящуюся историю.После fetch сообщение о необходимости указать способ reconciliation либо невозможности fast-forward.Выбрать merge или rebase осознанно.
Незакоммиченные измененияВ рабочей папке есть незавершённые файлы.git status --short показывает M, A или ??.Сначала сохранить рабочее дерево.

#Пошаговая диагностика и решение

  1. 1. Остановитесь и сохраните текущее состояниеВ терминале корня репозитория выполните git status и git branch -vv, запишите текущую ветку и её upstream. При незавершённых правках сделайте безопасный коммит или stash после копирования файлов. Не используйте git reset --hard origin/main: он потеряет локальные коммиты.
  2. Только чтение локальных файлов и настроенных upstream
    Linux · Терминал (Bash)Команда
    Только чтение локальных файлов и настроенных upstream.
    git status --short
    git branch -vv
  1. 2. Загрузите сведения без объединенияВыполните git fetch для настроенного сервера origin, если это его имя. Fetch обновляет удалённые ссылки, но не переписывает вашу рабочую ветку. При ошибке доступа или сети разбирайте её отдельно; не начинайте merge/rebase с неполным результатом.
  2. Обновляет удалённые ссылки и объекты в локальном репозитории без слияния файлов
    Linux · Терминал (Bash)Команда
    Обновляет удалённые ссылки и объекты в локальном репозитории без слияния файлов.
    git fetch origin
  1. 3. Сравните две стороны историиПодставьте вместо origin/ИМЯ_ВЕТКИ действующий upstream и выполните команду ниже. Строки с префиксом < — уникальны локально, с > — уникальны удалённо. Если уникальных коммитов нет, причина может быть в другой ветке или настройке pull.
  2. Только чтение истории; замените имя удалённой ветки
    Linux · Терминал (Bash)Команда
    Только чтение истории; замените имя удалённой ветки.
    git log --oneline --left-right --graph HEAD...origin/ИМЯ_ВЕТКИ
  1. 4. Создайте резервную ссылку на текущий коммитПеред изменением истории создайте локальную ветку с отдельным именем, например backup-before-pull-20261102; убедитесь, что такое имя свободно. Это сохраняет путь к текущим коммитам и позволяет вернуться после неудачной операции.
  2. Создаёт дополнительную локальную ссылку на текущий HEAD; ничего не переключает
    Linux · Терминал (Bash)Команда
    Создаёт дополнительную локальную ссылку на текущий HEAD; ничего не переключает.
    git branch backup-before-pull-20261102
  1. 5. Выберите слияние для общей опубликованной историиЕсли локальные коммиты уже доступны другим участникам или проект предпочитает merge-коммиты, в чистой рабочей ветке используйте git pull --no-rebase. При конфликтах Git остановится; в каждом файле выберите правильные изменения, проверьте и зафиксируйте merge. При необходимости возможно git merge --abort.
  2. Скачивает и объединяет изменения; может создать коммит слияния
    Linux · Терминал (Bash)С осторожностью
    Скачивает и объединяет изменения; может создать коммит слияния. Только после резервной ветки и согласования с командой.
    git pull --no-rebase

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. 6. Либо используйте rebase только для своих неопубликованных коммитовЕсли разработчик работает в личной ветке и локальные коммиты ещё не опубликованы, git pull --rebase перенесёт их на свежую удалённую историю. При конфликте решите его, затем git add выбранные файлы и git rebase --continue; при неуспехе git rebase --abort. Не делайте rebase над общей опубликованной веткой.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)С осторожностью
    Переписывает идентификаторы локальных коммитов; только для личных неопубликованных изменений.
    git pull --rebase

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. 7. Проверьте, что история стала согласованнойПовторите git status, git log --oneline --graph -10 и при необходимости git fetch. Убедитесь, что сохранены локальные и удалённые изменения, а рабочее дерево не содержит конфликта. Если проблема вернулась, проверьте выбранную стратегию в настройках проекта, а не включайте force push.

#Проверка результата и действия при повторении

Успех: git pull после выбранной и согласованной стратегии завершается без сообщения о divergent branches, история содержит нужные коммиты обеих сторон и тесты проекта выполняются. При неуспехе есть резервная ветка для восстановления.

Если на указанном шаге результат отличается, остановитесь и запишите первое полное сообщение об ошибке, версию инструментов и проверенное состояние до исправления. Не переходите к опасным действиям на действующем проекте: повторите проверку на отдельной копии, верните сохранённые файлы и только затем выбирайте следующую причину.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.