Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!20.10.2022
Як виправити помилковий git push --force
🤠🚒🛟 Сьогодні колега перезаписав мої зміни командою git push --force
.
Я не засмутився, бо сам великий любитель пушити примусово. Виправити таку ситуацію досить легко.
Треба розуміти модель Git: в ньому нічого не зникає назавжди (принаймні, відразу.) Git push перезаписує ланцюг комітів, це так. Але старі коміти залишаються в базі даних Гіта аж до виконання команди git gc
(вручну або за досягненням межі по розміру.) Їх можна знайти командою git reflog - цю команду має знати кожний, хто любить push --force
. Вона перелічить всі нещодавно активні коміти, навіть якщо вони були перезаписані. Далі залишається витягнути втрачений коміт командою git cherry-pick
, і пушнути результат.
Чому я користуюсь git push --force
? Зазвичай тому, що не люблю коміти-виправлення. А їх інколи доводиться робити багато. А ще, якщо змін багато, я люблю розбивати їх на логічні шматки по комітам. Звісно, відразу такого ніколи не заплануєш (хіба що не комітити до останнього — а це справжня небезпека, не те що push --force
). Тому при підготовці пул-реквеста я сортую зміни командою git rebase --interactive
.
(До речі, замість --force
варто знати та використовувати більш обачливу опцію --force-with-lease
.)