Перейти к содержанию

Push и Pull: Синхронизация с удаленным репозиторием

Основные команды для обмена изменениями между локальным и удаленным репозиторием.

Git Push (Отправка изменений)

Отправляет ваши локальные коммиты на удаленный сервер.

Базовая отправка

# Отправить текущую ветку на origin
git push origin <имя-ветки>

Если ветка уже связана с удаленной (после git push -u):

git push

Первая отправка ветки

При первой отправке новой ветки используйте флаг -u (или --set-upstream), чтобы связать локальную ветку с удаленной:

git push -u origin feature/login

После этого можно будет писать просто git push.

Отправка всех веток

git push --all origin

Принудительная отправка (Force Push)

Опасно! Переписывает историю на сервере. Используйте только если уверены, что никто другой не работает с этой веткой.

git push --force

Безопасная альтернатива:

git push --force-with-lease

Эта команда проверит, не изменилась ли удаленная ветка с момента вашего последнего fetch, и предотвратит случайную потерю чужих коммитов.

Удаление ветки на сервере

git push origin --delete <имя-ветки>

Git Pull (Получение изменений)

Загружает изменения с удаленного сервера и сразу объединяет их с вашей текущей веткой.

git pull origin <имя-ветки>

Или для текущей связанной ветки:

git pull

Что делает git pull?

По сути, git pull — это комбинация двух команд:

git fetch
git merge
  1. Скачивает новые коммиты с сервера.
  2. Автоматически пытается слить их с вашей текущей веткой.

Pull с использованием Rebase

Вместо слияния можно сделать rebase, чтобы история оставалась линейной:

git pull --rebase origin <имя-ветки>

Можно настроить это поведение по умолчанию:

git config --global pull.rebase true

Git Fetch (Только загрузка)

Скачивает изменения с сервера, но не объединяет их с вашими файлами. Это безопасный способ узнать, что произошло в удаленном репозитории.

# Скачать все изменения со всех веток
git fetch origin

# Скачать конкретную ветку
git fetch origin <имя-ветки>

После fetch вы можете посмотреть, что изменилось:

git log HEAD..origin/main

И только потом решить, делать ли merge или rebase.

Типичный рабочий цикл

  1. Начали работу над задачей: bash git checkout main git pull origin main git checkout -b feature/new-task

  2. В процессе работы (периодически): bash git fetch origin git rebase origin/main # или git pull --rebase

  3. Завершили задачу: bash git add . git commit -m "Добавить новую фичу" git push -u origin feature/new-task

Решение частых проблем

Ошибка: "rejected ... because the remote contains work that you do not have"

Это значит, что на сервере есть коммиты, которых нет у вас. Решение:

git pull --rebase
# Затем исправьте конфликты, если будут
git push

Ошибка: "fatal: The current branch has no upstream branch"

Вы пытаетесь сделать git push без указания ветки. Решение:

git push -u origin <имя-ветки>

Назад: Remote → | Далее: Clone и Fetch →