Git rebase vs. Git merge?

Co powinienem wybrać?

Już tłumaczę i objaśniam.

1️⃣ Gdy pracujesz na swoim feature branchu, a w międzyczasie pojawią się zmiany na głównym, to zachodzi potrzeba synchronizacji.

     A---B---C feature
     / D---E---F---G---H---I master

W tym wypadku, do feature brancha chcesz dołączyć zmiany z commitów F-G-H-I.

2️⃣ Do wyboru masz dwie opcje:

3️⃣ Git merge sprawi, że kod z mastera zostanie wciągnięty do twojego brancha dodatkowym commitem mergującym J.

     A---B---C---[J] feature
     /                 / D---E---F---G---H---I master

W ten sposób nie zmieniasz historii feature brancha, ale też umieszczasz w nim commitów F-G-H-I wprost, a poprzez dodatkowy sztuczny commit J.

4️⃣ Git rebase natomiast przepnie początek twojej gałęzi na ostatni commit z mastera.

                            A'--B'--C' feature
                            / D---E---F---G---H---I master

Dzięki temu cała historia feature brancha jest w pełni sekwencyjna z historią z mastera.

5️⃣ W ten sposób w momencie mergowania do mastera możesz:

1) zachować wszystkie commity z feature brancha i otrzymać ładną historię zmian

2) zesquashować wszystkie zmiany i otrzymać jeden, ładny pojedynczy commit bez potrzeby rozwiązywania konfliktów w ostatecznym etapie pracy z feature branchem

3) dodatkowo będąc na feature branchu możesz w łatwy sposób podejrzeć zmiany poszczególnych commitów z master brancha

6️⃣ Co więc wybrać, zapytasz? 🤔

Ja tylko i wyłącznie wybieram GIT REBASE.

Dzięki temu otrzymuję czystą historię zmian, a mergowanie feature brancha do mastera jest już czystą przyjemnością.

Daj znać, który styl Ty i Twój zespół preferujecie.