Git
( * Відповідь на питання розгорніть за допомого трикутного значка |> )
- Що таке GitFlow?
GitFlow – модель розгалужень версій коду в Git.
Ключові ідеї:
- Дана модель відмінно підходить для організації робочого процесу на основі релізів,
- Gitflow пропонує створення окремої гілки для виправлення помилок в продуктовому середовищі.
Послідовність роботи при використанні моделі Gitflow:
- З master створюється гілка develop.
- З develop створюються гілки feature.
- Коли розробка нової функціональності завершена, вона об’єднується з гілкою develop.
- З develop створюється гілка release.
- Коли гілка релізу готова, вона об’єднується з develop та master.
- Якщо в master виявлена проблема, з неї створюється гілка hotfix.
- Як тільки виправлення на гілці hotfix завершено, вона об’єднується з develop та master.
- Чим
merge
відрізняється відrebase
?
git merge
– виконує злиття комітів з однієї гілки в іншу. В цьому процесі змінюється тільки цільова гілка. Історія вихідних гілок залишається незмінною.
Переваги:
- Простота,
- Зберігає повну історію і хронологічний порядок,
- Підтримує контекст гілки.
Недоліки:
- Історія комітів може бути заповнена (забруднена) множиною комітів,
- Відладка з використанням git bisect може стати складнішою.
git rebase
– стискає всі зміни в один патч. Потім інтегрує патч в цільову гілку. На відміну від merge, rebase перезаписує історію, тому що вона передає завершену роботу з однієї гілки в іншу. В процесі усувається небажана історія.
Переваги:
- Спрощує потенційно складну історію,
- Спрощення маніпуляцій з єдиним комітом,
- Уникнення злиття комітів в зайнятих репозиторіях і гілках,
- Очищає проміжні коміти, роблячи їх одним комітом, що корисно для DevOps команд.
Недоліки:
- Стиснення фіч до декількох комітів може приховати контекст
- Переміщення публічних репозиторіїв може бути небезпечним при роботі в команді,
- З’являється більше роботи,
- Для відновлення з віддаленими гілками потрібен примусовий пуш. Це призводить до оновлення всіх гілок, що мають одне і те ж ім’я, як локально, так і віддалено.
- Чим
tag
відрізняється відbranch
?
І tag і branch представляють собою вказівники на коміти.
- Гілка представляє собою окремий потік розробки, який може виконуватися одночасно з іншими розробками в тій же кодовій базі. Коміт в гілці вказує на зміни, які додаються в нових комітах
- Тег представляє собою версію певної гілки в певний момент часу.
Tag представляє собою версію тієї чи іншої гілки в певний момент часу. Branch представляє собою окремий потік розробки, який може виконуватися одночасно з іншими розробками в тій же кодовій базі.
- *В гілці develop є коміт зі змінами, які потрібно перенести в гілку master. Як це зробити?*
Необхідно знайти хеш цього коміту і виконати наступну команду в гілці, в яку потрібно перенести коміт.
git cherry-pick <commit_hash>
- Для чого потрібна команда
git commit --amend
?
commit --ammend
використовується для виправлення повідомлення останнього коміту. Також можливо використовувати, щоб додати файли в індекс (git add
), після додати файли в коміт git commit --ammend
.
- Що таке Trunk-based development?
Trunk-based Development (TBD) – модель гілкування, в якій розробники спільно працюють над кодом в одній гілці, що називається “стовбуром” (trunk). При цьому інші гілки мають короткий термін життя завдяки використанню документованих методів.
- Стан репозиторію пішов на багато комітів вперед. Як відкотити весь репозиторій до певного коміту?
git reset –hard
- В репозиторій запушений коміт зі змінами в двох файлах. Як відкотити зміни цього коміту?
git revert