Злиття: мердж-коміт, squash і rebase на GitHub
Що робить мердж, три варіанти за кнопкою мерджу на GitHub і що кожен лишає в історії, fast-forward простими словами і як перевірити, чи зміна справді в main.
Урок 5 з 15~31 хв навчанняЗ них ~16 хв на запитання та завдання
Зміст1 із 63 кроків
Alex Tutor
Daniel
Ви
Alex Tutor
feature/free-delivery-1000 у main. Доки цього не сталося, на сайті й далі 800.Alex Tutor
8be2f70Add cat treats bundlemain5c1d7e2Set freeDeliveryFrom to 1000a8f40b9Update delivery page textd36b9c5Update cart hint textfeature/free-delivery-1000
Граф комітів, від найстарішого: Pull request #133 перед мерджем 1. коміт 8be2f70 у main "Add cat treats bundle" 2. гілка feature/free-delivery-1000 починається від коміту 8be2f70 3. коміт 5c1d7e2 у feature/free-delivery-1000 "Set freeDeliveryFrom to 1000" 4. коміт a8f40b9 у feature/free-delivery-1000 "Update delivery page text" 5. коміт d36b9c5 у feature/free-delivery-1000 "Update cart hint text"
Ви
main. Три ahead, нуль behind: main не рухалася, відколи Daniel почав.Alex Tutor
main будуть усі три зміни: нове число в конфігурації, текст на сторінці доставки й підказка в кошику. Сама гілка лишиться такою, як була.Alex Tutor
Питання 1
Daniel мерджить feature/free-delivery-1000 у main. Що змінюється?
Alex Tutor
Merge pull request, а поруч із нею маленька стрілка. Стрілка відкриває три варіанти.Ви
Create a merge commit, Squash and merge, Rebase and merge. І котрий дає правильний результат?Alex Tutor
main однакові: поріг 1000 у кожному разі. Відрізняється історія, яку ти потім читатимеш.Ви
Daniel
Alex Tutor
main.Alex Tutor
Питання 2
Три варіанти в кнопці мерджу на GitHub залишають у файлах main різний текст.
Alex Tutor
Create a merge commit. GitHub додає коміти гілки в main такими, як вони є, і зв'язує дві лінії одним додатковим комітом: це мердж-коміт (merge commit).Alex Tutor
8be2f70Add cat treats bundle5c1d7e2Set freeDeliveryFrom to 1000a8f40b9Update delivery page textd36b9c5Update cart hint textfeature/free-delivery-1000e4b7a90Merge pull request #133main
Граф комітів, від найстарішого: Варіант 1: мердж-коміт 1. коміт 8be2f70 у main "Add cat treats bundle" 2. гілка feature/free-delivery-1000 починається від коміту 8be2f70 3. коміт 5c1d7e2 у feature/free-delivery-1000 "Set freeDeliveryFrom to 1000" 4. коміт a8f40b9 у feature/free-delivery-1000 "Update delivery page text" 5. коміт d36b9c5 у feature/free-delivery-1000 "Update cart hint text" 6. мердж-коміт e4b7a90: feature/free-delivery-1000 змерджено в main "Merge pull request #133" (виділено)
Ви
e4b7a90. Тобто в цього коміту двоє батьків: попередній коміт у main і останній у гілці.Alex Tutor
main зростає на чотири записи: три коміти від Daniel і мердж-коміт.Daniel
git merge. Нічого не переписується: мої коміти зберігають свої хеші, і завжди видно, де гілка почалася і де повернулася.Ви
main.Alex Tutor
Питання 3
Pull request #140 змерджили через Create a merge commit. Які твердження правдиві? Познач усе, що підходить.
r1Add returns paget1Add returns formt2Validate order numberfeature/returns-formr2Fix typo on returns pager3Merge pull request #140main
Граф комітів, від найстарішого: Pull request #140 змерджено з мердж-комітом 1. коміт r1 у main "Add returns page" 2. гілка feature/returns-form починається від коміту r1 3. коміт t1 у feature/returns-form "Add returns form" 4. коміт t2 у feature/returns-form "Validate order number" 5. коміт r2 у main "Fix typo on returns page" 6. мердж-коміт r3: feature/returns-form змерджено в main "Merge pull request #140"
Alex Tutor
Squash and merge. GitHub бере всі зміни з гілки й кладе їх у main одним новим комітом.Alex Tutor
8be2f70Add cat treats bundle5c1d7e2Set freeDeliveryFrom to 1000a8f40b9Update delivery page textd36b9c5Update cart hint textfeature/free-delivery-10006f2c8a1Raise free-delivery threshold to 1000 UAH (#133)main
Граф комітів, від найстарішого: Варіант 2: squash and merge 1. коміт 8be2f70 у main "Add cat treats bundle" 2. гілка feature/free-delivery-1000 починається від коміту 8be2f70 3. коміт 5c1d7e2 у feature/free-delivery-1000 "Set freeDeliveryFrom to 1000" 4. коміт a8f40b9 у feature/free-delivery-1000 "Update delivery page text" 5. коміт d36b9c5 у feature/free-delivery-1000 "Update cart hint text" 6. коміт 6f2c8a1: feature/free-delivery-1000 змерджено в main через squash "Raise free-delivery threshold to 1000 UAH (#133)" (виділено)
Ви
6f2c8a1, і пунктирна лінія замість суцільної. А його назва закінчується на (#133).Alex Tutor
main. Частиною історії стали їхні зміни, запаковані в один коміт. Номер pull request до назви GitHub додає сам.Daniel
main у першому модулі й мала вигляд прямої лінії: один pull request, один коміт. Мої коміти на кшталт «oops, typo» туди не потрапляють.Ви
Alex Tutor
Commits зберігає їх навіть після видалення гілки.Alex Tutor
Питання 4
Pull request #140 змерджили через Squash and merge. Скільки нових комітів отримала main і де досі можна побачити t1 і t2?
r1Add returns paget1Add returns formt2Validate order numberfeature/returns-formr2Fix typo on returns pager3Add returns form (#140)main
Граф комітів, від найстарішого: Pull request #140 змерджено через squash 1. коміт r1 у main "Add returns page" 2. гілка feature/returns-form починається від коміту r1 3. коміт t1 у feature/returns-form "Add returns form" 4. коміт t2 у feature/returns-form "Validate order number" 5. коміт r2 у main "Fix typo on returns page" 6. коміт r3: feature/returns-form змерджено в main через squash "Add returns form (#140)"
Alex Tutor
Rebase and merge. GitHub відтворює коміти гілки поверх main, один за одним. Без мердж-коміту і без склеювання.Alex Tutor
8be2f70Add cat treats bundle5c1d7e2Set freeDeliveryFrom to 1000a8f40b9Update delivery page textd36b9c5Update cart hint textfeature/free-delivery-10001f6a3d8Set freeDeliveryFrom to 10002b9e5c4Update delivery page text7d0c8f1Update cart hint textmain
Граф комітів, від найстарішого: Варіант 3: rebase and merge 1. коміт 8be2f70 у main "Add cat treats bundle" 2. гілка feature/free-delivery-1000 починається від коміту 8be2f70 3. коміт 5c1d7e2 у feature/free-delivery-1000 "Set freeDeliveryFrom to 1000" 4. коміт a8f40b9 у feature/free-delivery-1000 "Update delivery page text" 5. коміт d36b9c5 у feature/free-delivery-1000 "Update cart hint text" 6. коміт 1f6a3d8 у main "Set freeDeliveryFrom to 1000" 7. коміт 2b9e5c4 у main "Update delivery page text" 8. коміт 7d0c8f1 у main "Update cart hint text" (виділено)
Ви
main три коміти з тими самими повідомленнями, що й у гілці, але з іншими хешами.Alex Tutor
Daniel
main не змінювалася, відколи почалася гілка, об'єднувати нічого. Git може просто пересунути назву main уперед, на останній коміт гілки.Ви
main стояла на місці, поки ти працював. Жодного нового коміту, просто назва наздоганяє.Daniel
Alex Tutor
Питання 5
Зістав кожен спосіб мерджу з тим, як після нього виглядає граф.
Торкніться відповіді, а потім рядка, до якого вона належить. Можна й перетягувати.
Create a merge commitSquash and mergeRebase and merge- Fast-forward у терміналі
Відповіді, які ще треба розмістити
Ви
Daniel
main це одна завершена робота з посиланням на її pull request. Відкотити її можна одним кліком.Alex Tutor
Ви
Alex Tutor
Питання 6
Який варіант мерджу дав таку історію main?
r1Add returns paget1Add returns formt2Validate order numberfeature/returns-formr2Fix typo on returns pager3Add returns formr4Validate order numbermain
Граф комітів, від найстарішого: Pull request #140 після мерджу 1. коміт r1 у main "Add returns page" 2. гілка feature/returns-form починається від коміту r1 3. коміт t1 у feature/returns-form "Add returns form" 4. коміт t2 у feature/returns-form "Validate order number" 5. коміт r2 у main "Fix typo on returns page" 6. коміт r3 у main "Add returns form" 7. коміт r4 у main "Validate order number"
Alex Tutor
Squash and merge, а потім Confirm squash and merge. Тепер питання, яке ти як продакт чутимеш найчастіше: зміна вже там, де треба?Open змінилася на фіолетову Merged, а рядок поруч каже, що коміт пішов у main.Alex Tutor
Raise free-delivery threshold to 1000 UAH#133
Змерджено в main сьогодні: зміни вже в main
Rewrite delivery page copy#132
Відкритий: зміни Emma досі в її гілці
Fix checkout button after cart edits#134
Чернетка: Daniel ще працює над ним
Ви
main. #132 від Emma ще відкритий, а виправлення кнопки, #134, поки що чернетка. Жоден із них до main не дійшов.Alex Tutor
main. Друга: змерджено ще не означає, що зміна вийшла в реліз.Daniel
main автоматично викладають на сайт за кілька хвилин. Інші команди накопичують мерджі й випускають їх релізом. До цього дійдемо в четвертому модулі.Merged, хоча #98 відкотив його за десять хвилин. Merged це факт про минуле. Якщо є сумніви, відкрий файл у main.Ви
Alex Tutor
Питання 7
Зміни яких із цих pull requests зараз є в main? Познач усе, що підходить.
Add summer promo banner#129
Rewrite delivery page copy#132
Raise free-delivery threshold to 1000 UAH#133
Fix checkout button after cart edits#134
Try animated delivery badge#127
Alex Tutor
main лише один.Ви
Alex Tutor
Daniel
Alex Tutor
Питання 8Коротка відповідь · Завдання з перевіркою ШІ
Колега відкриває pull request #133 і бачить у вкладці Commits три коміти, а в історії main лише один: «Raise free-delivery threshold to 1000 UAH (#133)». Колега думає, що два коміти загубилися. Поясни двома-трьома реченнями, що сталося і де ці три коміти досі можна знайти.
Напишіть відповідь і отримайте оцінку та відгук від нашого ШІ-рецензента.
Увійдіть, щоб отримати відгук ШІВи
Alex Tutor
На цьому все. Ви відповіли на всі завдання — чудова робота.