Main Branch (anciennement Master) est la branche principale de Git qui contient du code de production stable prêt à être déployé. Chaque commit dans main correspond à une version de publication du projet, et la branche elle-même est protégée contre les modifications directes et sert de source unique de vérité pour toute l'équipe. Selon GitHub, 2020, depuis octobre 2020, la nouvelle branche par défaut s'appelle main au lieu de master.
Points clés
Main Branch (ou Master — selon la configuration du dépôt) est la branche par défaut créée lors de l'initialisation de tout dépôt Git. C'est la branche principale du projet et elle contient du code prêt pour le déploiement en production.
Contrairement à develop, où le travail quotidien avec les nouvelles fonctionnalités bat son plein, main est la vitrine du projet. Chaque version du code dans main a suivi un cycle complet : développement dans une branche feature, intégration dans develop, préparation de la publication dans une branche release et tests finaux. Ce n'est qu'après cela que les modifications arrivent dans main.
Principe clé : main doit toujours être stable. Si une erreur est trouvée dans main, cela signifie qu'un hotfix urgent doit être publié hors tour. Par conséquent, dans les projets professionnels, main est protégée contre les modifications accidentelles par des règles de protection de branche.
Selon Git Book, main n'est pas une branche spéciale avec des propriétés uniques, mais une référence normale à un commit qui est conventionnellement considérée comme principale. Git ne fait pas de distinction entre main et toute autre branche au niveau du système.
Historiquement, la branche par défaut dans Git s'appelait master. En juin 2020, le mouvement Black Lives Matter a attiré l'attention sur les termes master et slave dans l'industrie informatique. GitHub a annoncé une transition vers le terme main pour la branche par défaut.
Depuis octobre 2020, tous les nouveaux dépôts sur GitHub sont créés avec la branche main. GitLab et Bitbucket ont également implémenté le support de main comme nom par défaut. Git 2.28 (juillet 2020) a ajouté l'option init.defaultBranch pour configurer le nom de la branche par défaut.
Techniquement, renommer une branche existante de master à main est une opération simple. Le principal défi est de mettre à jour toutes les références dans les configurations CI/CD, la documentation et les dépôts locaux des développeurs.
Pour renommer une branche dans un dépôt existant, exécutez :
# Renommer localement master en main
git branch -m master main
# Mettre à jour le dépôt distant
git push -u origin main
# Supprimer l'ancien master sur le serveur
git push origin --delete master
# Mettre à jour HEAD sur le serveur
# (via l'interface web GitHub : Settings → Branches → Default branch)
Git Flow et GitHub Flow définissent le rôle de la branche main différemment. Le choix du modèle dépend de la taille de l'équipe, de la fréquence des publications et des exigences de stabilité du code.
| Caractéristique | Git Flow | GitHub Flow |
|---|---|---|
| Rôle de main | Uniquement les versions de publication | Branche centrale de développement |
| Branches supplémentaires | Develop, Release, Hotfix | Uniquement les branches feature |
| Fréquence des publications | Toutes les 1 à 4 semaines | Plusieurs fois par jour |
| Complexité | Élevée | Faible |
| Quand choisir | Applications mobiles avec cycles de publication | Services web avec déploiement continu |
Pour le développement mobile, Git Flow est la norme, car la publication d'une application dans l'App Store et Google Play a des cycles de publication fixes. GitHub Flow est plus adapté aux projets web pouvant être déployés plusieurs fois par jour.
Dans GitHub Flow, il n'y a pas de branche develop. Toutes les branches feature sont créées directement à partir de main et, une fois terminées, sont fusionnées via une Pull Request. Chaque fusion dans main déclenche automatiquement le déploiement en production. Ce modèle nécessite un niveau élevé d'automatisation des tests et de discipline d'équipe.
Dans GitHub Flow, il n'y a pas de branche develop. Toutes les branches feature sont créées directement à partir de main et, une fois terminées, sont fusionnées via une Pull Request. Chaque fusion dans main déclenche automatiquement le déploiement en production. Ce modèle nécessite un niveau élevé d'automatisation des tests et de discipline d'équipe.
La protection de branche pour main est un paramètre obligatoire dans tout projet commercial. Sans elle, un push accidentel pourrait envoyer du code incomplet en production ou casser une application fonctionnelle pour tous les utilisateurs.
Configurer les six règles est la norme pour les projets mobiles avec 10 000+ utilisateurs. Pour les petits projets, les trois premières règles suffisent.
Le niveau de protection de main dépend de l'échelle du projet. Une startup peut se contenter d'une protection minimale, tandis qu'une application d'entreprise nécessite des restrictions maximales.
Le marquage est la pratique consistant à créer des références nommées vers des commits spécifiques dans main. Chaque étiquette correspond à une version de l'application publiée en production. Cela permet de basculer rapidement vers n'importe quelle version précédente pour le débogage ou les correctifs.
La norme de dénomination des étiquettes dans le développement mobile est SemVer (Versionnement Sémantique) : v1.2.3, où le premier numéro est la version majeure (changements cassants), le second est la version mineure (nouvelles fonctionnalités) et le troisième est le correctif (réparations).
Une étiquette est créée après la fusion de la branche release dans main. Ce commit est ensuite compilé dans CI/CD, signé et envoyé à la boutique d'applications. Si une erreur est trouvée dans l'étiquette, une branche hotfix est créée à partir de cette étiquette.
# Créer une étiquette de publication annotée
git tag -a v2.4.1 -m "Release version 2.4.1"
# Envoyer l'étiquette au serveur
git push origin v2.4.1
# Voir toutes les étiquettes dans le dépôt
git tag -l "v2.*"
# Créer une branche hotfix à partir d'une étiquette spécifique
git checkout -b hotfix/crash-fix v2.4.1
Comprendre la hiérarchie des branches dans Git Flow est la base pour organiser correctement le développement collaboratif. Chaque type de branche a sa propre source, son objectif et ses règles de fusion.
Règle importante : feature n'est jamais fusionnée directement dans main. feature → develop → release → main est la chaîne de fusion correcte. Enfreindre cette règle annule le but même du modèle Git Flow.
Considérons un scénario : l'équipe a terminé la préparation de la publication v2.5.0. La branche release a été révisée et est prête à être fusionnée dans main. Après la fusion, une étiquette est créée et la publication est lancée.
# Basculer vers main et mettre à jour
git checkout main
git pull origin main
# Fusionner la branche release vérifiée
git merge --no-ff release/2.5.0
# Créer une étiquette de publication
git tag -a v2.5.0 -m "Release 2.5.0 - Payment integration"
# Envoyer main et l'étiquette au serveur
git push origin main --tags
Le drapeau --no-ff (sans avance rapide) garantit la création d'un commit de fusion, même si la fusion aurait pu être effectuée en déplaçant simplement le pointeur. Cela préserve l'information que les modifications provenaient d'une branche release, ce qui facilite l'analyse de l'historique.
Si une erreur critique est découverte en production, le processus diffère d'une publication normale. Un hotfix est créé à partir de main et, après correction, est fusionné à la fois dans main et dans develop.
Si une erreur critique est découverte en production, le processus diffère d'une publication normale. Un hotfix est créé à partir de main et, après correction, est fusionné à la fois dans main et dans develop.
# Créer une branche hotfix à partir de main
git checkout main
git checkout -b hotfix/2.5.1-crash-fix
# Corriger et faire un commit
git add src/fix/
git commit -m "Fix crash on login screen"
# Fusionner hotfix de retour dans main
git checkout main
git merge --no-ff hotfix/2.5.1-crash-fix
git tag -a v2.5.1 -m "Hotfix 2.5.1"
git push origin main --tags
# Fusionner hotfix également dans develop
git checkout develop
git merge --no-ff hotfix/2.5.1-crash-fix
git push origin develop
# Supprimer la branche hotfix
git branch -d hotfix/2.5.1-crash-fix
Foire aux questions
Techniquement — oui, c'est une référence normale à un commit. Mais pratiquement — non, car main est la branche par défaut et la plupart des plateformes ne permettent pas de supprimer la branche définie comme branche par défaut. Au lieu de supprimer, créez une nouvelle branche par défaut, puis supprimez l'ancienne.
Si l'erreur n'est pas critique, utilisez le processus normal : créez une branche feature à partir de develop, corrigez l'erreur, effectuez une révision de code et attendez le prochain cycle de publication. Hotfix est utilisé uniquement pour les erreurs critiques qui bloquent le travail des utilisateurs.
main est une branche locale sur votre ordinateur. origin/main est un cache local de l'état de la branche distante sur le serveur. La commande git fetch met à jour origin/main, tandis que git pull fusionne immédiatement les modifications dans votre main locale.
Utilisez git clone pour copier l'intégralité du dépôt dans un nouveau répertoire. Si vous devez changer l'URL distante, exécutez git remote set-url origin. Pour changer de répertoire de travail sans copier le dépôt, utilisez git worktree add.
Oui, même dans une équipe de deux personnes, la protection de main est justifiée. Un push accidentel avec une commande incorrecte pourrait écraser l'historique. La protection minimale — interdire les pushes directs et exiger des PR — prend 5 minutes à configurer et évite des heures de récupération de données.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.