Удалённые репозитории
1Удалённые репозитории: remote и fetch2push и pull: синхронизация с remote← вы здесь3clone и fork: работа с чужими репозиториями
Урок 2~12 минут

push и pull: синхронизация с remote

Подключили remote — теперь учимся синхронизировать изменения в обе стороны.

git push — отправить коммиты

bash
git push origin main         # отправить ветку main в origin
git push -u origin main      # то же + запомнить связь
git push                     # после -u: просто git push без аргументов

Флаг -u (или --set-upstream) нужен только один раз — при первом push новой ветки. После этого Git знает куда пушить.

bash
git switch -c feature/search
# ...делаешь работу...
git push -u origin feature/search  # первый push ветки
git push                           # все последующие

Rejected push — отказ

! [rejected] main -> main (non-fast-forward)
hint: Updates were rejected because the remote contains work
hint: that you do not have locally.

Это означает: пока ты работал, кто-то уже запушил в remote. Твоя история и история remote разошлись.

Решение:

bash
git pull origin main   # забери изменения remote
# если конфликт — разреши
git push origin main   # теперь push пройдёт

Никогда не делай git push --force на shared ветки (main, develop). Force push переписывает историю remote — коллеги потеряют свои коммиты.

git pull — получить изменения

bash
git pull origin main   # fetch + merge
git pull               # если upstream настроен

git pull = git fetch + git merge. Это удобно, но бывает сюрпризом: сразу мержит, не давая посмотреть что пришло.

Безопасный вариант

bash
git fetch origin              # скачать, не мержить
git log origin/main --oneline # посмотреть что пришло
git diff main origin/main     # увидеть разницу
git merge origin/main         # смержить когда готов

pull --rebase

bash
git pull --rebase origin main

Вместо merge-коммита переносит твои коммиты поверх remote. История получается линейной. Многие команды настраивают это по умолчанию:

bash
git config --global pull.rebase true

Попробуй в симуляции

Нажми «+ локальный коммит», потом «git push». Потом «+ remote коммит» и посмотри что будет при push без pull.

Типичный рабочий день

bash
# Начало дня — забрать изменения коллег
git switch main
git pull origin main
 
# Работаешь в своей ветке
git switch feature/my-task
git merge main              # взять свежий main в свою ветку
 
# В конце дня — отправить
git push origin feature/my-task

Команды

bash
git push origin main           # отправить
git push -u origin main        # отправить + запомнить upstream
git push --force-with-lease    # force push (безопасный вариант)
git pull                       # fetch + merge
git pull --rebase              # fetch + rebase
git fetch origin               # только скачать
git fetch --all                # со всех remote
git pull = fetch + merge. Если хочешь контроль — делай их по отдельности.
push и pull
💻Local
f0e1d2cinit: первый коммит
4b5c6d7docs: README
a3f7c21feat: главная страница
push →
← pull
☁️GitHub (origin)
f0e1d2cinit: первый коммит
4b5c6d7docs: README
a3f7c21feat: главная страница
🎯
Миссия 1 из 4
Что делает флаг -u при первом push?