Введение
Краткое описание команд git remote, git fetch, git push и git pull с примерами их основного использования.
Git — это распределённая система контроля версий: каждый клон является полным репозиторием с собственной историей, а не просто рабочей копией, извлечённой с центрального сервера. Поэтому совместная работа в Git — это по сути синхронизация: обмен целыми ветками между репозиториями, а не передача отдельных наборов изменений.
На этой странице рассматриваются четыре команды, которые перемещают коммиты между локальным и удалёнными репозиториями: git remote, git fetch, git push и git pull. Каждая команда подробно описана на отдельной странице, но понимание того, как они взаимодействуют, делает повседневную совместную работу предсказуемой.

Концептуальная модель: локальный и удалённый репозитории
Прежде чем перейти к отдельным командам, полезно представить общую картину. При синхронизации задействованы три элемента:
- Ваш локальный репозиторий — ветки, в которые вы делаете коммиты, например
main. - Удалённый репозиторий (remote) — именованная ссылка (например,
origin), указывающая на URL другого репозитория. - Удалённые отслеживающие ветки — локальные копии веток удалённого репозитория в режиме только для чтения, именуемые по схеме
origin/main. Они фиксируют состояние удалённого репозитория на момент последнего обращения к нему.
Направление передачи данных подсказывает, какую команду использовать:
git fetchиgit pullзагружают коммиты с удалённого репозитория.git pushотправляет коммиты на удалённый репозиторий.git remoteуправляет самими соединениями.
git remote
Команда git remote предназначена для создания, просмотра и удаления соединений с другими репозиториями. По умолчанию она выводит список всех ранее сохранённых удалённых соединений.
При клонировании репозитория Git автоматически создаёт удалённый репозиторий с именем origin, указывающий на исходный URL, поэтому вручную добавлять его для своих проектов приходится редко. Дополнительные удалённые репозитории добавляются при совместной работе с форками: например, upstream указывает на исходный проект, от которого был создан форк.
# List configured remotes
git remote
# origin
# Show their fetch/push URLs
git remote -v
# origin https://github.com/user/repo.git (fetch)
# origin https://github.com/user/repo.git (push)
# Add a second remote
git remote add upstream https://github.com/original/repo.gitgit fetch
Команда git fetch загружает коммиты, файлы и ссылки из удалённого репозитория в локальный, обновляя удалённые отслеживающие ветки (например, origin/main). Она позволяет видеть, над чем работают другие участники команды, не затрагивая вашу рабочую ветку.
Обе команды — git fetch и git pull — загружают содержимое из удалённого репозитория, однако git fetch является безопасным, неразрушающим вариантом: она только обновляет удалённые отслеживающие ветки и никогда не изменяет рабочие файлы. Никакого слияния не происходит до тех пор, пока вы явно не запросите его.
# Download new commits from origin (does not change your working branch)
git fetch origin
# Review what arrived before integrating it
git log main..origin/main
# Integrate it yourself when ready
git merge origin/mainПаттерн «сначала fetch, затем проверка, затем merge» объясняет, почему многие команды предпочитают git fetch команде git pull: вы можете изучить входящие изменения до того, как они попадут в редактируемую ветку.
git push
Команда git push загружает содержимое локального репозитория в удалённый. Если git fetch импортирует коммиты в локальные удалённые отслеживающие ветки, то git push экспортирует ваши локальные коммиты в соответствующие ветки на удалённом репозитории, чтобы остальные участники команды могли их увидеть.
# Push the current branch's commits to origin
git push origin main
# First push of a new branch: set up tracking with -u
git push -u origin feature-loginОтправка успешна только тогда, когда удалённую ветку можно перемотать вперёд без потери коммитов (fast-forward). Если кто-то другой успел сделать push в это время, Git отклонит отправку и попросит вас сначала интегрировать его работу — обычно с помощью git pull или git fetch с последующим слиянием. Избегайте --force в общих ветках: это может перезаписать коммиты коллег.
git pull
Команда git pull по существу объединяет git fetch и шаг интеграции в одной команде. Она загружает новое содержимое из удалённого репозитория и сразу интегрирует его в текущую ветку.
По умолчанию git pull сочетает git fetch с git merge, создавая коммит слияния при расхождении историй. Вместо этого можно настроить использование git rebase (git pull --rebase), который переигрывает локальные коммиты поверх загруженных, сохраняя линейную историю.
# Fetch from origin and merge into the current branch
git pull origin main
# Fetch and rebase your local commits on top instead
git pull --rebase origin mainКогда что использовать
Краткое руководство по выбору команды в повседневной работе:
- Только начинаете работу в этот день? Выполните
git pull(илиgit fetch+ проверка + merge), чтобы получить последние изменения. - Хотите посмотреть, что изменилось, не нарушая работу? Используйте
git fetch, затемgit logилиgit diffотносительноorigin/<branch>. - Завершили часть работы? Выполните
git push, чтобы поделиться ею. - Push отклонён? В удалённом репозитории есть коммиты, которых у вас нет. Выполните pull (или fetch и merge/rebase), разрешите конфликты, затем снова сделайте push.
Далее перейдите к страницам с описанием каждой команды, а также ознакомьтесь с главой Git workflows, где рассказывается, как команды комбинируют эти команды в воспроизводимый процесс.