Sobes.tech
Middle

Quelle est la différence entre les commandes merge et rebase dans le système de gestion de versions Git?

sobes.tech IA

Réponse de l'IA

merge fusionne des branches en créant un nouveau commit avec deux parents, conservant l'historique des modifications. rebase déplace les commits d'une branche sur une autre, ordonnant linéairement l'historique, mais modifiant les hashes des commits.

  • Avec merge:

    • Un nouveau commit de fusion est créé.
    • L'historique des branches reste explicite.
    • Des conflits peuvent survenir, résolus dans le nouveau commit.
    # Exemple d'utilisation de merge
    git checkout branche-fonctionnalite
    git merge main
    # Résolution des conflits, si présents
    git commit -m "Fusionner main dans branche-fonctionnalite"
    
  • Avec rebase:

    • Les commits "se déplacent" et s'appliquent sur la branche cible.
    • L'historique devient linéaire, peut sembler "plus propre".
    • Les hashes des commits déplacés changent.
    • Un conflit peut survenir pour chaque commit déplacé.
    • Non recommandé pour les branches déjà publiées et utilisées par d'autres développeurs, car cela modifie l'historique.
    # Exemple d'utilisation de rebase
    git checkout branche-fonctionnalite
    git rebase main
    # Résolution des conflits, si présents (répéter pour chaque commit en conflit)
    git add .
    git rebase --continue
    # ou git rebase --skip pour sauter le commit
    # ou git rebase --abort pour annuler
    
Caractéristique merge rebase
Changement d'historique Conserve l'historique Le modifie (écrase)
Commits Crée un commit de fusion Déplace les commits existants
Linéarité de l'historique Non (les branches divergent) Oui (simplifie l'historique)
Approche Non destructif Potentiellement destructif
Applicabilité Branches publiques et communes Branches locales et personnelles