W3docs

Введение

Краткое описание команд git remote, git fetch, git push и git pull с примерами их основного использования.

Git — это распределённая система контроля версий: каждый клон является полным репозиторием с собственной историей, а не просто рабочей копией, извлечённой с центрального сервера. Поэтому совместная работа в Git — это по сути синхронизация: обмен целыми ветками между репозиториями, а не передача отдельных наборов изменений.

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

git remote

Концептуальная модель: локальный и удалённый репозитории

Прежде чем перейти к отдельным командам, полезно представить общую картину. При синхронизации задействованы три элемента:

  • Ваш локальный репозиторий — ветки, в которые вы делаете коммиты, например 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.git

git 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, где рассказывается, как команды комбинируют эти команды в воспроизводимый процесс.

Практика

Практика
Какие утверждения о командах синхронизации в Git, описанных в учебнике W3Docs по Git, являются правильными?
Какие утверждения о командах синхронизации в Git, описанных в учебнике W3Docs по Git, являются правильными?
Was this page helpful?