Bonjour,
Je suis nouveau sur GIT.
Quelqu'un pourrait-il m'expliquer succinctement ce que fait "git rebase" et quand l'utiliser?
Merci
Bonjour,
Je suis nouveau sur GIT.
Quelqu'un pourrait-il m'expliquer succinctement ce que fait "git rebase" et quand l'utiliser?
Merci
La fonction rebase de git permet de réécrire l'historique d'une branche.
On l'utilise pour mettre à jour une branche locale que l'on a pas encore mergé avec la branche principale (master généralement sur les repo git) afin d'obtenir un merge fast forward.
Par exemple.
J'ai ma branche principale nommée master qui est dans cet état au moment où je vais créer ma branche locale (sur laquelle je vais dev ma feature et que je vais nommer par exemple toto) :
Je crée une branche toto qui démarre donc au commit M3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 M1 - M2 - M3
J'écris les modifs (constituées pour l'exemple de 2 commits T1 et T2) pour ma feature toto dans ma branche toto, mon historique pour cette branche est donc :
Entre temps un collège a mergé sa branche zozo dans master. Master est donc dans cet état :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 M1 - M2 - M3 - T1 - T2
Après avoir mis à jour mon master local, mon tree est donc dans cet état :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 M1 - M2 - M3 - Z1 - Z2 - Z3
A ce stade 2 solutions, soit je fais un git merge toto dans develop, soit je rebase d'abord ma branche toto.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 M1 - M2 - M3 - Z1 - Z2 - Z3 \ T1 - T2
Si je fais un merge j'obtiens ceci :
Où M4 est un commit de merge. Git aura été obligé de faire un merge non-fast-forward.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 M1 - M2 - M3 - Z1 - Z2 - Z3 - M4 \ / T1 - T2 ----------
Maintenant si je rebase ma branche locale toto :
L'opération a changé le parent de T1. Le parent de T1 était M3 avant le rebase, après le rebase c'est Z3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 M1 - M2 - M3 - Z1 - Z2 - Z3 \ T1 - T2
Je peux alors faire un merge qui sera fast-forward et j'obtiens :
Je n'ai plus qu'à pousser mon master sur le repo central.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 M1 - M2 - M3 - Z1 - Z2 - Z3 - T1 - T2
Voilà, je peux pas expliquer mieux que ça !
Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.
"Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
Kenneth E. Boulding
"Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
Jean-Baptiste Say, Traité d'économie politique, 1803.
"/home/earth is 102% full ... please delete anyone you can."
Inconnu
Bon la mise en page dans les balises CODE déconne à plein régime.
Cf mes notes sur mon github pour avoir une vue plus claire.
Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.
"Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
Kenneth E. Boulding
"Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
Jean-Baptiste Say, Traité d'économie politique, 1803.
"/home/earth is 102% full ... please delete anyone you can."
Inconnu
Ne jamais rebaser une branche qui est publique.
En d'autres termes, tu peux rebaser une branche tant que ya que toi qui la possède. A partir du moment où elle a été poussée sur ton repo central il ne faut plus le faire sinon tu vas réécrire l'historique public et ça va foutre le bordel dans le tree de tous tes collègues.
La bonne pratique c'est donc de rebaser systématiquement ta branche de feature avec la branche d'intégration des développements avant de pousser ta branche de feature pour effectuer une merge / pull request. Si les merges dans master/develop sont effectués en local par les devs c'est pareil, on rebase d'abord la branche de feature, puis on merge, puis on pousse master/develop. Ca permet d'obtenir un historique parfaitement linéaire qui est donc beaucoup plus facile à lire.
Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.
"Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
Kenneth E. Boulding
"Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
Jean-Baptiste Say, Traité d'économie politique, 1803.
"/home/earth is 102% full ... please delete anyone you can."
Inconnu
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager