Configuration de sortie
IMPORTANT : Cette skill effectue une opération Git rapide et nécessite un format de sortie spécifique.
Lis le frontmatter de cette skill. Si un champ output-style est présent, exécute immédiatement :
/output-style <valeur-du-champ>
Note : Une fois que le champ output-style sera supporté nativement par Claude Code, cette instruction pourra être supprimée.
Création de branche Git
Créer une nouvelle branche Git de manière structurée avec support des issues GitHub.
Variables
- •SOURCE_BRANCH: Premier argument ($1) - branche source depuis laquelle créer
- •ISSUE_OR_TEXT: Second argument ($2) - numéro d'issue GitHub ou texte descriptif
Relevant Files
- •@.git/config
- •@.gitignore
- •@docs/README.md
Instructions à Exécuter
IMPORTANT : Exécute ce workflow étape par étape :
🚨 ÉTAPE CRITIQUE : CHECKOUT VERS SOURCE D'ABORD 🚨
1. Vérifier que SOURCE_BRANCH est fourni
- •Extrais SOURCE_BRANCH depuis $ARGUMENTS (premier argument)
- •Si SOURCE_BRANCH n'est pas fourni, utilise AskUserQuestion pour demander :
code
Question: "Depuis quelle branche veux-tu créer la nouvelle branche ?" Options: ["main", "master", "develop", "Autre"]
2. Valider que SOURCE_BRANCH existe localement
- •Exécute
git branch --list "$SOURCE_BRANCH"avec Bash - •Si le résultat est vide, affiche :
code
❌ ERREUR : La branche source '$SOURCE_BRANCH' n'existe pas localement Branches disponibles :
- •Puis exécute
git branch -apour lister les branches - •Arrête le workflow
- •Puis exécute
3. 🔴 CHECKOUT VERS SOURCE_BRANCH AVANT TOUT 🔴
- •Exécute
git checkout $SOURCE_BRANCHavec Bash - •Exécute
git branch --show-currentpour vérifier qu'on est bien dessus - •CRITIQUE : Cette étape garantit qu'on crée depuis un point propre
4. 🔴 PULL POUR METTRE À JOUR SOURCE_BRANCH 🔴
- •Exécute
git pull origin $SOURCE_BRANCHavec Bash - •CRITIQUE : Garantit qu'on part du dernier commit de origin
- •Évite de créer depuis un point obsolète
5. Générer le nom de la nouvelle branche
- •Extrais ISSUE_OR_TEXT depuis $ARGUMENTS (second argument)
Si ISSUE_OR_TEXT est fourni :
A. Détecter le type (numéro ou texte)
- •Si ISSUE_OR_TEXT est un entier → c'est un numéro d'issue
- •Sinon → c'est du texte descriptif
B. Si c'est un numéro d'issue :
- •Exécute
gh issue view ${ISSUE_OR_TEXT} --json title,labels,bodyavec Bash - •Si l'issue n'existe pas, affiche une erreur et arrête
Détermine le préfixe (dans cet ordre de priorité) :
- •
Vérifie les labels de l'issue (priorité haute) :
- •Labels
bug,fix,bugfix→ préfixe =fix/ - •Labels
hotfix,critical,urgent→ préfixe =hotfix/ - •Labels
feature,enhancement,new-feature→ préfixe =feature/ - •Labels
chore,maintenance,refactor→ préfixe =chore/ - •Labels
documentation,docs→ préfixe =docs/ - •Labels
test,tests→ préfixe =test/
- •Labels
- •
Si aucun label pertinent, vérifie la description (case-insensitive) :
- •Contient
fix,bug,error,crash→ préfixe =fix/ - •Contient
hotfix,critical,urgent,production→ préfixe =hotfix/ - •Contient
feature,add,implement,new→ préfixe =feature/ - •Contient
refactor,cleanup,improve→ préfixe =chore/
- •Contient
- •
Si toujours rien, vérifie le titre de l'issue :
- •Même logique que pour la description
- •
Si aucun indicateur trouvé → préfixe =
feature/(défaut)
- •Nettoie le titre de l'issue :
- •Convertis en minuscules
- •Remplace espaces par tirets
- •Supprime caractères spéciaux
- •Limite à 50 caractères
- •Génère le nom :
{prefixe}{ISSUE_OR_TEXT}-{titre-nettoyé}
C. Si c'est du texte descriptif :
- •
Analyse le début du texte pour détecter le préfixe :
- •Commence par
fix,bug→ préfixe =fix/ - •Commence par
hotfix→ préfixe =hotfix/ - •Commence par
chore,refactor→ préfixe =chore/ - •Commence par
docs,doc→ préfixe =docs/ - •Commence par
test→ préfixe =test/ - •Sinon → préfixe =
feature/(défaut)
- •Commence par
- •
Nettoie le texte :
- •Retire le préfixe détecté du début
- •Convertis en minuscules
- •Remplace espaces par tirets
- •Supprime caractères spéciaux
- •
Génère le nom :
{prefixe}{texte-nettoyé}
Si ISSUE_OR_TEXT n'est pas fourni :
- •Utilise AskUserQuestion pour demander le nom de branche
6. Vérifier que la nouvelle branche n'existe pas
- •Exécute
git branch --list "$NEW_BRANCH"avec Bash - •Si le résultat n'est pas vide, affiche :
code
❌ ERREUR : La branche '$NEW_BRANCH' existe déjà Choisis un autre nom de branche
- •Arrête le workflow
7. Créer et checkout la nouvelle branche
- •Exécute
git checkout -b $NEW_BRANCHavec Bash - •La branche est créée depuis SOURCE_BRANCH (car on est dessus)
8. Afficher le résumé
Affiche :
✅ Branche créée : $NEW_BRANCH
📝 Préfixe détecté : {source du préfixe (label/description/titre/défaut/texte)}
📍 Depuis : $SOURCE_BRANCH
{Si issue} 🔗 Issue associée : #{ISSUE_OR_TEXT}
📝 Le tracking sera configuré automatiquement au premier commit avec :
git push -u origin $NEW_BRANCH
⚠️ IMPORTANT - NE PAS configurer de tracking automatiquement :
- •❌ INTERDIT :
git branch --set-upstream-to=origin/$SOURCE_BRANCH $NEW_BRANCH - •✅ Le tracking sera configuré lors du premier push avec
-u - •RAISON : Configurer le tracking vers SOURCE_BRANCH pousse les commits sur la branche parente au lieu de créer une nouvelle branche distante
Expertise
Conventions de nommage des branches (préfixe détecté automatiquement) :
- •
feature/{numéro}-{description}: Nouvelles fonctionnalités - •
fix/{numéro}-{description}: Corrections de bugs - •
hotfix/{numéro}-{description}: Corrections urgentes en production - •
chore/{numéro}-{description}: Maintenance, refactoring - •
docs/{numéro}-{description}: Documentation - •
test/{numéro}-{description}: Tests - •Utilise des tirets, pas d'espaces ni caractères spéciaux
Détection automatique du préfixe (par priorité) :
- •Labels de l'issue GitHub
- •Mots-clés dans la description de l'issue
- •Mots-clés dans le titre de l'issue
- •Défaut :
feature/si aucun indicateur trouvé
Template
# Exemple 1 : Issue avec label "bug"
/git:branch main 42
# Résultat :
# - Récupère l'issue #42 (labels: ["bug"])
# - Titre: "Login form crashes on submit"
# - Détecte le préfixe "fix/" via le label
# - Crée la branche: fix/42-login-form-crashes-on-submit
# Exemple 2 : Issue avec label "feature"
/git:branch main 58
# Résultat :
# - Récupère l'issue #58 (labels: ["enhancement"])
# - Titre: "Add dark mode support"
# - Détecte le préfixe "feature/" via le label
# - Crée la branche: feature/58-add-dark-mode-support
# Exemple 3 : Issue sans label, description contient "fix"
/git:branch main 99
# Résultat :
# - Récupère l'issue #99 (labels: [])
# - Description contient "This will fix the error..."
# - Détecte le préfixe "fix/" via la description
# - Crée la branche: fix/99-{titre-simplifie}
# Exemple 4 : Issue sans label, sans description, titre contient "bug"
/git:branch main 123
# Résultat :
# - Récupère l'issue #123 (labels: [], description vide)
# - Titre: "Bug in user profile"
# - Détecte le préfixe "fix/" via le titre
# - Crée la branche: fix/123-bug-in-user-profile
# Exemple 5 : Texte descriptif avec préfixe explicite
/git:branch main "fix login validation"
# Résultat :
# - Détecte "fix" au début du texte
# - Crée la branche: fix/login-validation
# Exemple 6 : Texte descriptif sans préfixe
/git:branch main "Add OAuth support"
# Résultat :
# - Pas de préfixe détecté → défaut "feature/"
# - Crée la branche: feature/add-oauth-support
Examples
# Créer une branche depuis main avec issue GitHub (détection auto du préfixe) /git:branch main 123 # → Le préfixe sera détecté via labels/description/titre de l'issue # Créer une branche depuis main avec texte descriptif /git:branch main "user authentication" # → Créera: feature/user-authentication (défaut) # Créer une branche fix depuis main avec texte explicite /git:branch main "fix login bug" # → Créera: fix/login-bug (détecté via "fix" au début) # Créer une branche hotfix depuis main /git:branch main "hotfix critical payment issue" # → Créera: hotfix/critical-payment-issue (détecté via "hotfix") # Créer une branche depuis develop sans argument supplémentaire /git:branch develop # → Demandera le nom de branche à l'utilisateur # Créer une branche depuis une branche existante avec issue /git:branch feature/api-base 456 # → Préfixe détecté automatiquement depuis l'issue #456
Report
- •Nom de la branche créée
- •Préfixe détecté et sa source (label/description/titre/défaut)
- •Branche source utilisée
- •Issue associée (si applicable)
- •Statut du checkout
- •Note : Le tracking remote sera configuré lors du premier push avec
git push -u origin $NEW_BRANCH
Validation
- •✅
SOURCE_BRANCHdoit exister localement - •✅
SOURCE_BRANCHest obligatoire - •✅ CHECKOUT vers SOURCE_BRANCH AVANT création (CRITIQUE)
- •✅ PULL pour mettre à jour SOURCE_BRANCH (CRITIQUE)
- •✅ La nouvelle branche ne doit pas déjà exister
- •✅ Si
ISSUE_OR_TEXTest un numéro, l'issue doit exister sur GitHub - •✅ Le nom généré respecte les conventions de nommage
- •✅ Détection automatique entre numéro d'issue et texte descriptif
Pourquoi checkout + pull vers SOURCE_BRANCH d'abord ?
Problème 1 évité :
- •Si on est sur
feature/Aet on créefeature/Bdepuismain - •Sans checkout vers
maind'abord, la branche est créée depuisfeature/A - •Les commits de
feature/Ase retrouvent surfeature/B - •Résultat : impossible de créer une PR propre
Problème 2 évité :
- •Si
mainlocale est en retard surorigin/main - •Sans pull, on crée depuis un point obsolète
- •Résultat : commits manquants, conflits, PR avec historique incorrect
Solution :
- •TOUJOURS faire
git checkout $SOURCE_BRANCH - •TOUJOURS faire
git pull origin $SOURCE_BRANCH - •PUIS créer avec
git checkout -b $NEW_BRANCH