Skip to main content

Що відбувається з історією комітів при merge?

При git merge історія комітів не переписується - вона зберігається такою, якою була, з усіма розгалуженнями та комітами.

Це ключовий момент, який майже завжди хочуть почути на співбесіді.


Що означає «історія зберігається»

Git не змінює наявні коміти:

  • не змінює їхні хеші
  • не змінює порядок усередині гілок
  • не видаляє старі коміти

Він додає нові коміти, якщо це потрібно.


Як виглядає історія після merge

Ситуація 1: Fast-forward merge

Якщо основна гілка не змінювалася, Git просто «пересуває вказівник»:

A---B---C (main) \ D---E (feature)

Після merge:

A---B---C---D---E (main)

Історія лінійна, жодних нових комітів не з'явилося.


Ситуація 2: Звичайний merge (merge commit)

Якщо обидві гілки розвивалися паралельно:

A---B---C---F (main) \ D---E (feature)

Після merge Git створює merge-коміт:

A---B---C---F---M (main) \ / D---E---

Коміт M:

  • має два батьки
  • фіксує факт об'єднання гілок
  • не змінює старі коміти

Що важливо підкреслити на співбесіді

  • merge не переписує історію
  • усі коміти залишаються оригінальними
  • merge-коміт показує контекст розробки
  • історія може бути нелінійною, але чесною

Чому це вважається безпечним

Тому що:

  • в інших розробників нічого не ламається
  • не виникає конфліктів хешів
  • можна спокійно робити git pull

Тому:

git merge можна використовувати для публічних гілок


Коротка відповідь (якщо мало часу)

При git merge історія комітів зберігається: старі коміти не змінюються, а за потреби додається новий merge-коміт, який зв'язує гілки.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.