Git на просунутому рівні: rebase, cherry-pick, subtree
Освойте просунуті можливості Git: від rebase та cherry-pick до subtree та інтерактивних методів роботи з історією. Керуйте гілками та комітами як професіонал.
Rebase: перезапис історії комітів
Команда git rebase — потужний інструмент для зміни історії комітів і послідовності змін. Вона особливо корисна, коли потрібно підтримувати чисту й лінійну історію розробки.
Наприклад, ви працюєте в гілці feature, а гілка main вже оновилася. Щоб підтягнути зміни без створення зайвих merge-комітів, використовуйте:
git checkout feature
git rebase mainГілка feature тепер міститиме ваші коміти, "переписані" поверх останнього стану main.
Також ви можете скористатися інтерактивним режимом:
git rebase -i HEAD~4Це дозволяє редагувати, об'єднувати (squash), видаляти або змінювати порядок комітів. Такий підхід зручний перед пушем у спільний репозиторій — історія стане акуратною і зрозумілою.
Cherry-pick: вибіркове перенесення комітів
Якщо вам потрібно перенести конкретний коміт з однієї гілки в іншу, але не весь вміст, команда git cherry-pick стане в пригоді.
Припустимо, ви хочете перенести виправлення з гілки bugfix у гілку develop:
git checkout develop
git cherry-pick a1b2c3dГілка develop тепер містить коміт із зазначеним хешем, навіть якщо він із іншої гілки.
Cherry-pick корисний для ізольованих змін або під час вибору окремих виправлень для різних версій продукту.
Subtree: підключення інших репозиторіїв
git subtree дозволяє вбудовувати один репозиторій в інший як підпроєкт. На відміну від submodule, subtree не потребує окремого керування залежностями й працює як частина основного репозиторію.
Наприклад, підключимо зовнішній проєкт:
git subtree add --prefix=vendor/lib https://github.com/username/library.git main --squashЦя команда завантажить зовнішній репозиторій і розмістить його в папці vendor/lib вашого проєкту.
Щоб оновити зовнішній проєкт пізніше:
git subtree pull --prefix=vendor/lib https://github.com/username/library.git main --squashSubtree особливо добрий для проєктів, де зовнішній код має бути частиною загального коміту та історії.
Stash: тимчасове збереження змін
git stash дозволяє зберегти поточні зміни, не комітячи їх, і повернутися до чистого робочого каталогу. Це зручно, якщо ви не завершили роботу, але потрібно терміново переключитися на іншу гілку.
git stash
git checkout mainПовернутися до збережених змін можна за допомогою:
git stash popСписок усіх збережених stash’ів:
git stash listBisect: пошук проблемного коміту
git bisect — чудова команда для пошуку першого коміту, що спричинив баг. Git використовує бінарний пошук по історії комітів.
Приклад:
git bisect start
git bisect bad # поточний коміт містить баг
git bisect good a1b2c3d # коміт, у якому все працювалоGit почне переходити між проміжними комітами, поки ви не вкажете, у якому з них баг з'явився вперше.
Clean: видалення непотрібних файлів
Якщо в каталозі проєкту залишилися тимчасові або згенеровані файли, які не відстежуються Git, їх можна видалити командою:
git clean -fdПрапорець -f означає "force", а -d — видалення директорій. Будьте обережні: ця команда незворотна.
Shortlog і log: аналіз історії комітів
git shortlog дозволяє швидко побачити список авторів і кількість їхніх комітів:
git shortlog -snА команда git log з параметрами — потужний спосіб візуального аналізу історії:
git log --oneline --graph --decorate --allЦе покаже дерево комітів у компактному вигляді.
Tag: мітки та версії
git tag використовується для маркування важливих комітів, наприклад — релізів:
git tag v1.0.0
git push origin v1.0.0Можна створювати анотовані теги з додатковою інформацією:
git tag -a v1.1.0 -m "Реліз версії 1.1.0"Більше цікавих новин
Яких фахівців у сфері IT будуть затребувані у 2024 році?
9 отличных сервисов для проверки кода
На каком языке пишут искусственный интеллект? Введение в ИИ
ТОП-5: Найкращі нещодавні фільми та серіали про програмування