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-merge

Переваги:

  • Простота,
  • Зберігає повну історію і хронологічний порядок,
  • Підтримує контекст гілки.

Недоліки:

  • Історія комітів може бути заповнена (забруднена) множиною комітів,
  • Відладка з використанням git bisect може стати складнішою.
  • git rebase – стискає всі зміни в один патч. Потім інтегрує патч в цільову гілку. На відміну від merge, rebase перезаписує історію, тому що вона передає завершену роботу з однієї гілки в іншу. В процесі усувається небажана історія.

!git-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