git pull: забрать чужие изменения

Обновлено 31 июля 2026 г.

git pull скачивает новые коммиты с сервера и сразу вливает их в твою текущую ветку. Одна команда делает два шага: сначала git fetch, потом git merge.

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

$ git pull
From github.com:username/my-project
   4f122d0..fb1befe  main       -> origin/main
Updating 4f122d0..fb1befe
Fast-forward
 notes.txt | 1 +
 1 file changed, 1 insertion(+)

Первые две строки - работа fetch: коммиты приехали, указатель origin/main сдвинулся. Дальше идёт слияние. Слово Fast-forward значит, что своих коммитов у тебя не было, и git просто передвинул указатель ветки вперёд, ничего не сочиняя.

Если ты коммитил, пока коммитили другие, истории разошлись, и git собирает коммит слияния:

$ git pull
From github.com:username/my-project
   fb1befe..9553949  main       -> origin/main
Merge made by the 'ort' strategy.
 readme.txt | 1 +
 1 file changed, 1 insertion(+)

Конфликт при pull

Когда ты и коллега правили один и тот же участок одного файла, автоматика пасует:

$ git pull
From github.com:username/my-project
   9553949..b0a71c4  main       -> origin/main
Auto-merging conf.txt
CONFLICT (content): Merge conflict in conf.txt
Automatic merge failed; fix conflicts and then commit the result.

Это рутина, а не катастрофа, и ничего пока не потеряно. Открой файл, выбери нужный вариант, убери маркеры <<<<<<<, ======= и >>>>>>>, потом git add и git commit. Вернуть всё как было до pull помогает git merge --abort. Разбор по шагам - в статье merge conflicts.

pull --rebase

Второй способ соединить расхождение - перенести свои коммиты поверх чужих, без коммита слияния:

$ git pull --rebase
From github.com:username/my-project
   58d82b3..f2b0989  main       -> origin/main
Successfully rebased and updated refs/heads/main.

История получается прямой линией: сначала чужие коммиты, потом твои. Цена в том, что твои коммиты получают новые хеши. Для ветки, которую ты ещё не отправлял, это безопасно; правила и ограничения - в статье git rebase.

Первый в жизни pull может вместо результата напечатать You have divergent branches and need to specify how to reconcile them. Git спрашивает, какой из двух способов ты выбираешь. Ответ даётся один раз:

$ git config --global pull.rebase false   # соединять через merge
$ git config --global pull.rebase true    # переносить свои коммиты поверх

Частые ошибки

Pull с незакоммиченными правками останавливается на error: Your local changes to the following files would be overwritten by merge. Закоммить работу или спрячь её через git stash, потом повтори.

Ещё pull вливает в ту ветку, в которой ты стоишь сейчас. Если задача идёт в отдельной ветке, а обновить надо основную, сначала git switch main.

Где это в учебнике

Глава 6. GitHub: облако и совместная работа.

Потренироваться руками - в Песочнице: настоящий терминал с git и проверка шагов.