Imaginez que vous deviez tester un nouvel algorithme d'imputation des valeurs manquantes ou refondre un script SQL qui alimente le tableau de bord de la direction générale. Si vous effectuez ces modifications directement sur le code en production, le moindre bug bloquera toute l'équipe.
C'est ici qu'intervient l'un des plus puissants concepts de Git : les branches.
🌿 Qu'est-ce qu'une Branche Git ?#
Une branche est un pointeur mobile vers un commit précis. Elle vous permet de créer une ligne temporelle parallèle dans laquelle vous pouvez écrire du code, ajouter des bibliothèques et tester des modèles en toute liberté, sans impacter la branche principale stable (main).
(Branche d'expérimentation : feature/nouveau-modele)
o ─── o ─── o
/ \ git merge
─── o ───────── o ─────o ──────────────o ───► Branche main (Production stable)
(Commit 1) (Commit 2)
Une fois vos tests validés, vous réintégrez vos travaux dans main grâce à une opération de fusion (merge).
🚀 1. Créer et Basculer sur une Branche#
La commande moderne : git switch#
Depuis la version 2.23 de Git, la commande recommandée pour changer de branche est git switch (qui remplace l'ancienne commande polyvalente git checkout) :
-c(create) : Crée la branche et bascule immédiatement dessus.
🏷️ Conventions de Nommage Recommandées en Data#
Adoptez des préfixes clairs pour identifier la nature de vos travaux :
- feature/nom-du-calcul : Pour une nouvelle fonctionnalité ou un nouveau modèle (ex: feature/clustering-rfm).
- fix/nom-du-correctif : Pour corriger une anomalie (ex: fix/taux-change-devise).
- experiment/nom-du-test : Pour une exploration de Data Science jetable.
📋 2. Lister et Gérer ses Branches#
Pour voir toutes les branches locales existantes et savoir sur laquelle vous travaillez (indiquée par une astérisque * et une couleur verte) :
Pour revenir sur la branche principale :
🤝 3. Fusionner une Branche (git merge)#
Une fois votre algorithme testé et validé sur votre branche :
- Basculez sur la branche de destination (généralement
main) : - Exécutez la fusion en désignant la branche contenant vos nouveautés :
Updating 7a3b4c1..9f8e2d4
Fast-forward
extract.py | 14 ++++++++++++++
1 file changed, 14 insertions(+)
Supprimer la branche devenue inutile#
Une fois les modifications fusionnées dans main, la branche temporaire peut être supprimée proprement :
⚔️ Démystifier les Conflits de Fusion (Merge Conflicts)#
Un conflit survient lorsque deux branches ont modifié les mêmes lignes d'un même fichier de façon contradictoire. Dans ce cas, Git ne sait pas quelle version choisir et s'interrompt pour vous demander votre arbitrage :
Auto-merging extract.py
CONFLICT (content): Merge conflict in extract.py
Automatic merge failed; fix conflicts and then commit the result.
Comment résoudre le conflit ?#
Ouvrez le fichier en conflit dans votre éditeur (VS Code, Cursor). Git a inséré des marqueurs visuels :
<<<<<<< HEAD (Votre branche actuelle main)
# Règle actuelle de gestion des valeurs manquantes
df['revenu'] = df['revenu'].fillna(0)
=======
# Règle proposée dans votre branche feature
df['revenu'] = df['revenu'].fillna(df['revenu'].median())
>>>>>>> feature/imputation-knn
- Analysez les deux options et décidez de la règle métier à conserver (par exemple, la médiane).
- Supprimez les marqueurs Git (
<<<<<<<,=======,>>>>>>>). - Enregistrez le fichier résolu.
- Validez la résolution dans Git :
📓 Attention Spéciale : Les Notebooks Jupyter (.ipynb) et Git#
Tout Data Analyst ou Data Scientist s'est déjà arraché les cheveux en essayant de fusionner deux versions d'un notebook .ipynb.
[!WARNING] Pourquoi les Notebooks provoquent-ils autant de conflits ?
Un fichier.ipynbest en réalité un fichier texte au format JSON contenant non seulement votre code Python, mais aussi les résultats d'exécution, les graphiques en base64, les métadonnées et le compteur d'exécution des cellules ([1],[2]). Si deux personnes exécutent le même notebook, les compteurs changent et Git signale un conflit illisible !Les bonnes pratiques indispensables : 1. Dans Jupyter, faites systématiquement Kernel > Restart Kernel and Clear All Outputs avant de commiter. 2. Déportez le code métier complexe et les fonctions réutilisables dans des modules
.pyclassiques suivis par Git, et ne gardez dans les notebooks que l'exploration visuelle. 3. Installez au besoin des outils d'assainissement automatique commenbstripout.
Vous maîtrisez désormais les branches et la gestion des versions locales sur votre machine. Dans la prochaine étape, nous allons propulser vos projets dans le cloud et découvrir la collaboration d'équipe sur GitHub !
Commentaires