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
- Скачивает новые коммиты с сервера.
- Автоматически пытается слить их с вашей текущей веткой.
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.
Типичный рабочий цикл¶
-
Начали работу над задачей:
bash git checkout main git pull origin main git checkout -b feature/new-task -
В процессе работы (периодически):
bash git fetch origin git rebase origin/main # или git pull --rebase -
Завершили задачу:
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 <имя-ветки>