Перебазування комітів за допомогою git rebase --onto
Перенесення частини комітів однієї гілки поверх іншої за допомогою команди git rebase --onto.
Перебазування частини комітів
Команда git rebase переносить усі коміти поточної гілки поверх іншої гілки. Проте іноді потрібно перенести лише частину комітів. Для цього використовується команда git rebase --onto.
Git знайде коміти, які знаходяться після вказаної базової гілки, і перенесе тільки їх поверх іншої гілки.
Синтаксис команди
git rebase --onto <нова-гілка> <базова-гілка> <поточна-гілка>Перший параметр вказує, куди потрібно перенести коміти. Другий — від якої точки починати перенесення. Третій — гілка, коміти якої потрібно перебазувати.
Приклад
Припустимо, є три гілки: main, server та client. Потрібно перенести лише коміти гілки client, яких немає у server, безпосередньо поверх main.
git rebase --onto main server clientДо перебазування
A──B──C────────────── main
│
├──D──E───────── server
│
└──F──G───────── client
git rebase --onto main server client
Після перебазування
A──B──C──F'──G'────── main
├──D──E───────── server
└──F'──G'── clientGit створить нові коміти F' та G' поверх останнього коміту гілки main. Коміти D та E залишаться лише у гілці server.
Злиття після перебазування
Після успішного перебазування можна перейти до основної гілки та виконати швидке злиття.
git switch main
git merge clientЯкщо після перебазування основна гілка не змінилася, Git виконає швидке злиття (Fast-forward) без створення merge-коміту.
Коли використовувати git rebase --onto
| Ситуація | Підходить |
|---|---|
| Перенести лише частину комітів | ✅ Так |
| Перебазувати всю гілку | ❌ Використовуйте git rebase |
| Змінити основу окремої гілки | ✅ Так |
| Перенести всі зміни між двома гілками | ❌ Краще git merge або git rebase |
Не використовуйте git rebase або git rebase --onto для комітів, які вже були опубліковані у спільному віддаленому репозиторії. Перебазування створює нові коміти та змінює історію проєкту, що може ускладнити роботу інших учасників команди.
- Створіть гілки server і client.
- Додайте кілька комітів у кожній гілці.
- Виконайте git rebase --onto для перенесення комітів client поверх main.
- Перейдіть до основної гілки та виконайте git merge.
- Перегляньте історію командою git log --oneline --graph.
💡 Показати підказку
Перед використанням git rebase --onto перегляньте історію командою git log --graph, щоб зрозуміти, які саме коміти будуть перенесені.
✅ Показати відповідь
Відповідь: Перебазувати частину комітів: git rebase --onto main server client Перейти до основної гілки: git switch main Виконати злиття: git merge client Переглянути історію: git log --oneline --graph