git remote, push, pull

Команды для работы с удалёнными репозиториями: добавление remote, публикация изменений и получение обновлений от коллег.

Зачем нужно

Git — распределённая система: каждый разработчик работает локально, а удалённый репозиторий (GitHub, GitLab, Bitbucket) служит общей точкой синхронизации. git remote управляет ссылками на удалённые репозитории, git push публикует локальные коммиты на сервере, git pull загружает изменения других разработчиков. Без этих трёх команд командная разработка невозможна.

Где используется

  • Публикация веток и коммитов на GitHub/GitLab для ревью и CI/CD
  • Синхронизация локального репозитория с работой команды
  • Настройка нескольких remote (fork + upstream в open-source)
  • Деплой через push в production-remote

Основной контент

git remote — управление ссылками

# Показать все remote
git remote -v
# origin  https://github.com/user/repo.git (fetch)
# origin  https://github.com/user/repo.git (push)

# Добавить remote
git remote add origin https://github.com/user/repo.git

# Добавить upstream (для форка)
git remote add upstream https://github.com/original/repo.git

# Изменить URL remote
git remote set-url origin git@github.com:user/repo.git

# Удалить remote
git remote remove upstream

# Переименовать remote
git remote rename origin main-remote

git push — публикация

# Отправить ветку на remote (первый раз — установить upstream)
git push -u origin feature/auth

# После установки upstream — просто
git push

# Отправить все локальные ветки
git push --all origin

# Отправить теги
git push --tags

# Удалить ветку на remote
git push origin --delete feature/old-branch

# Принудительный push (перезаписать историю — ОСТОРОЖНО)
git push --force-with-lease  # безопаснее чем --force

git fetch и git pull

# Загрузить изменения с remote, не применяя их
git fetch origin

# Загрузить со всех remote
git fetch --all

# Загрузить и применить к текущей ветке (fetch + merge)
git pull

# Загрузить и применить через rebase (чище история)
git pull --rebase

# Загрузить конкретную ветку
git pull origin main

Синхронизация с upstream (форк)

# Загрузить изменения из оригинального репозитория
git fetch upstream

# Применить к своей ветке main
git switch main
git merge upstream/main

# Или через rebase
git rebase upstream/main

# Опубликовать обновлённый main в свой форк
git push origin main

Типичный командный workflow

# Утром: синхронизироваться с командой
git pull --rebase origin main

# Работать в ветке, коммитить
git switch -c feature/new-endpoint
# ...
git commit -m "feat: добавить GET /api/products"

# Опубликовать ветку
git push -u origin feature/new-endpoint

# Создать PR на GitHub, получить ревью, merge
# После merge — удалить локальную ветку
git switch main
git pull
git branch -d feature/new-endpoint

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

  • git push --force на main/master — перезаписывает историю для всей команды; используй --force-with-lease и только на своих ветках
  • Не делать git pull перед git push — получишь rejected push из-за расхождения истории
  • Забыть -u при первом push ветки — потом придётся указывать remote и имя ветки вручную
  • git pull без --rebase в проектах с rebase-workflow — создаст лишний merge-commit

Связанные темы

Ресурсы