Коротка відповідь
juniorgit merge — це створює новий коміт‑мердж, який об’єднує історії двох гілок без зміни їхніх попередніх комітів. git rebase переміщує базу гілки, «приклеюючи» її коміти поверх іншої, що робить історію лінійною. Обидва підходи зберігають зміни, але merge залишає історію гілок, а rebase – ні.
Повне пояснення
Що це і навіщо
- git merge об’єднує дві гілки, створюючи коміт‑мердж. Це корисно, коли потрібно зберегти історію розгалужень і бачити точку об’єднання.
- git rebase переміщує коміти однієї гілки поверх іншої, роблячи історію лінійною. Це зручно для чистого журналу перед пушем у спільний репозиторій.
Ключові принципи
- Merge: не змінює існуючі коміти, додає новий коміт‑мердж.
- Rebase: копіює коміти, змінюючи їхні SHA‑1, тому історія стає новою.
Як це працює
- При merge Git знаходить спільного предка, обчислює diff між гілками і створює новий коміт‑мердж.
- При rebase Git перебирає кожен коміт з «підкладної» гілки, застосовуючи його поверх базової гілки.
Практика й реалізація
git merge feature– створює коміт‑мердж.git rebase mainу гілці feature – переміщує її коміти поверхmain.
Тестування
- Після merge можна перевірити
git log --graph– видно вузол‑мердж. - Після rebase лог стає лінійним, але треба переконатися, що ніхто не працював над тією ж гілкою.
Оптимізація та безпека
- Merge зберігає історію, що допомагає у відстеженні багів.
- Rebase робить історію чистішою, але може викликати конфлікти при спільній роботі.
Особливості в контексті DevOps
- У CI/CD pipelines часто використовують rebase для підготовки PR до merge.
- Merge використовується в GitHub Actions, коли потрібна історія об’єднання.
Часті помилки
- Після rebase не виконати
git push --force-with-lease→ конфлікти. - Merge без вирішення конфліктів → некоректна історія.
Cheatsheet
git merge <branch>– зберігає історію.git rebase <base>– лінійна історія, потребує force push.git rebase -i– інтерактивний rebase для редагування комітів.