7. Віддалені репозиторії та GitHub

Чим небезпечне переписування історії в публічному репозиторії

В попередньому розділі «Історія» ми розібрали, як змінювати коміти, скасовувати правки і скидати гілки. Усі ці операції так чи інакше переписують історію комітів. Для локальних гілок і приватних репозиторіїв це нормально, але в публічних репозиторіях і в роботі з колегами таке може створити проблеми.

Це як?

Уяви: серію комітів запушено в публічний репозиторій. Колеги забрали ці коміти й почали будувати свою роботу поверх них. Якщо тепер повернутися і змінити, скасувати чи скинути будь-який із цих комітів, ти фактично міняєш фундамент, на якому тримається робота колег.

Наступного разу, коли колеги спробують запушити свої зміни, вони отримають помилку: історія їхньої локальної гілки більше не збігається з історією віддаленої. Їм доведеться вручну зводити розбіжні історії докупи, а це заплутаний і неприємний процес.

Ясно. І що робити натомість?

Золоте правило: ніколи не переписуй публічну історію. Якщо коміт уже запушено в публічний репозиторій, вважай його висіченим у камені. Коли треба щось виправити, не намагайся змінити наявний коміт — використай git revert, щоб створити новий коміт зі зворотними правками.

Якщо без переписування історії ніяк (наприклад, треба прибрати чутливі дані, які випадково потрапили в коміт), спершу домовся з колегами. Переконайся, що всі забрали найновіші зміни і розуміють, що відбувається. Тоді після переписування історії кожному доведеться скинути свої локальні гілки до нової історії на remote.

Запам'ятаю. Щось іще варто знати?

Ще одне: обережніше з git push --force. Ця команда перезаписує віддалену гілку твоєю локальною, ігноруючи будь-які конфлікти. Це як сказати: «Мені байдуже, що там на remote. Зроби так, як у мене локально». Через це колеги можуть втратити свою роботу, якщо вони встигли запушити коміти, яких у тебе локально ще не було на момент force push.

В опції --force є цілком виправдані застосування, але вдавайся до неї, лише коли повністю розумієш наслідки. Якщо певності немає, краще використати git push --force-with-lease — ця команда принаймні попередить, якщо у віддаленій гілці є зміни, яких ти не очікуєш.

Next step
Хочеш спробувати Сюжетний режим?

Проходь курс так, як він і задуманий: маленькими порціями, у сфокусованому лінійному порядку, поступово відкриваючи статті Gitopedia. Будь-коли можна продовжити зі справжнім Git у VS Code/Cursor/Antigravity/Windsurf.

Сюжетний режим
БЕЗКОШТОВНО
але потрібен вхід