Dans le contexte de la gestion de version avec git
, voici un cas de figure qui arrive assez frĂ©quemment lorsquâon utilise les branches.
Imaginons donc le scénario suivant :
Un jour vous crĂ©er une branche Alpha pour dĂ©velopper une nouvelle fonctionnalitĂ©, ce dĂ©veloppement est un peu long et nâaboutis pas immĂ©diatement ou un « bug » vient perturber lâordre de chose, bref vous utilisez git
comme il est prĂ©vu dâĂȘtre utilisĂ©.
Donc dâautre fonctionnalitĂ© arrive peu Ă peu sur la branche principale, et un peu plus tard lors dâun nouveau dĂ©veloppement sur une branche BĂȘta vous souhaitez rĂ©cupĂ©rer le code provenant de la branche Alpha sans pour autant faire une sale fusion (« merge »), pour garder lâhistorique des 2 branches.
Nous partons donc de la situation suivante :
-
Vue texte
Branche master ---X1---X2--X3---X4---X5---X6---X7 \ \ Branche alpha A1---A2---A3 \ \ Branche beta B1---B2
-
Vue graphique horizontale
-
Vue graphique verticale
et que lâon souhaite obtenir :
-
Vue texte
Branche master ---X1---X2--X3---X4---X5---X6---X7 \ Branche beta B1---B2 \ Branche alpha A1---A2---A3
-
Vue graphique horizontale
-
Vue graphique verticale
Cela correspond typiquement à une fonctionnalité qui a été commencée, pas finie et entre temps de nouveaux développements ont été réalisés.
Non la solution ne passe pas par une fusion (en anglais merge) mais en utilisant la notion de rebase de git
.
Le processus de rebase consiste Ă rejouer des commits Ă partir dâune position donnĂ©e.
git rebase <branche>
RĂ©initialisez la branche extraite Ă <branche>
, appliquez les différences (entre HEAD
prĂ©cĂ©dent et lâancĂȘtre commun) et validez.
git checkout alpha
git rebase beta
git rebase <branche1>
<branche2>
RĂ©initialisez <branche2>
Ă <branche1>
, appliquez les différences (entre <branche2 précédente>
et lâancĂȘtre commun) et validez.
git rebase beta alpha
git rebase --onto <branche1>
<branche2>
RĂ©initialisez la branche extraite Ă <branche1>
, appliquez les différences (entre les versions précédentes de HEAD
et <branche2>
) et validez.
git checkout alpha
git rebase --onto beta X2
git rebase --onto <branche1>
<branche2>
<branche3>
RĂ©initialisez <branche2>
sur <branche1>
, appliquez les différences (entre les versions précédentes de HEAD
et <branche2>
) et validez.
git rebase --onto beta X2 alpha
Références
- git rebase to a different branch sur stackoverflow.
኿