Intégration avancée des branches : rebasage Git

Git avancé

Amanda Crawford-Adamo

Software and Data Engineer

Git rebase

  • Méthode d'intégration des changements
  • Diffère de merge
  • Supprime les commits de merge pour un historique plus clair
  • Garde un graphe de commits linéaire, plus lisible

Commande Git rebase :

git rebase <branch_name>
Git avancé

Exemple de rebase – avant

Image montrant la branche de fonctionnalité data cleanup et la branche main. La branche de fonctionnalité diverge après le deuxième commit de main. La branche main a deux commits supplémentaires après la création de data cleanup.

Git avancé

Processus de rebase

  1. Passez à votre branche de fonctionnalité data-cleanup.
git checkout data-cleanup
  1. Rebasez la branche main sur la branche data-cleanup.
git rebase main
  • Les commits de data-cleanup sont recréés après le dernier commit de main
  • Les commits rebasés de data-cleanup obtiennent de nouveaux hachages

Remarque : En cas de conflits, il faudra les résoudre manuellement.

Git avancé

Exemple de rebase – après

Image de la branche data cleanup rebasée sur la branche main. La branche data cleanup contient maintenant tous les commits de main et ses commits commencent après ceux de main. La branche main est inchangée.

Git avancé

Rebase interactif

git rebase -i <commit_hash> 

Fonctionnalités

  • Permet d'apporter des modifications fines à plusieurs commits
  • Ouvre un éditeur

Attention !

  • Rebaser des branches publiques peut perturber les flux de travail
    • N'utilisez pas rebase sur des branches publiques, comme main
  • Établissez des règles d'équipe sur l'usage de rebase
Git avancé

Rebase interactif – avant

$$

Voici l'historique de la branche data-validation avant de modifier l'historique des commits.

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit
Git avancé

Éditeur de rebase interactif

Voici comment modifier l'historique avec les commandes pick et fixup dans l'éditeur ouvert.

$ git rebase -i HEAD~3 
pick ghi9101 Add data validation function
fixup def5678 Fix validation bug
fixup abc1234 Optimize validation performance

# Rebase xyz1234..abc1234 onto HEAD~3(xyz1234) (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# f, fixup <commit> = like "squash", but discard this commit's log message
...
Git avancé

Rebase interactif – après

Avant

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

Après

$ git log --oneline data-validatoin
mno6789 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

Les commits suivants sont combinés en un seul :

  • abc1234
  • def5678
  • ghi9101
Git avancé

Merge ou rebase

L'image montre trois graphes : un graphe avec divergence, le graphe après merge et le graphe après rebase.

Merge

  • Préserve tout l'historique et la structure des branches
  • Garde le contexte des développements parallèles

Rebase

  • Rejoue les commits au-dessus de la branche cible
  • Crée un historique linéaire
  • Perd une partie du contexte
Git avancé

Quand utiliser merge ou rebase

Merge

Pour intégrer des fonctionnalités terminées en préservant le contexte de développement

Rebase

Pour garder les branches de fonctionnalité à jour avec main ou pour nettoyer avant le merge

À retenir

  • Rebase réécrit l'historique : utilisez-le avec soin
Git avancé

Passons à la pratique !

Git avancé

Preparing Video For Download...