Правку, нужную всем серверам, записывают коммитом и отправляют в общий репозиторий.
Коммит из прошлого урока (git add и git commit -m) живёт только в этой рабочей копии: git status после него пишет «ahead of 'origin/main' by 1 commit». git push отправляет новые коммиты ветки в origin, и другие копии получают их своим pull. После push status снова пишет «up to date with 'origin/main'».
Отправь правку в репозиторий
Команда решила поднять лимит загрузки lab-site до 50m на всех серверах. В /etc/nginx/conf.d поменяй лимит в lab-site.conf, запиши правку коммитом и отправь её в репозиторий /srv/git/lab-site.git, чтобы её забрали остальные копии.
Цели · 0 из 2
- Записать новый лимит коммитом ещё не выполнена
- Отправить коммит в общий репозиторий ещё не выполнена
Репозиторий принимает push, только если твой коммит продолжает его историю. Если кто-то отправил коммит раньше тебя, git откажет: ! [rejected] main -> main (fetch first) или (non-fast-forward). Чужой коммит не пропадёт и не перезапишется — сначала забери его pull, потом отправляй снова.
Когда новые коммиты есть и у тебя, и в репозитории, git pull спросит, как их соединить: «Need to specify how to reconcile divergent branches». git pull --no-rebase --no-edit соединяет их коммитом слияния с готовым сообщением, после него push проходит (в Вики).
Ты закоммитил правку, а git push ответил «! [rejected] main -> main (fetch first)». Что сделаешь?
-
reset --hardвыбросит твой коммит, и отправлять станет нечего. Свою правку пришлось бы делать заново. -
nginx к отказу не причастен: репозиторий не принял коммит, потому что в нём есть коммиты, которых нет у тебя.
-
--forceзаменит историю репозитория твоей, и коммит коллеги пропадёт из общей ветки. Отказ как раз защищает его.
Репозиторий принимает push, только если твой коммит продолжает его историю. Сначала pull забирает чужие коммиты, затем push проходит.