Initial commit
This commit is contained in:
152
commands/branch.md
Normal file
152
commands/branch.md
Normal file
@@ -0,0 +1,152 @@
|
||||
---
|
||||
model: claude-sonnet-4-5-20250929
|
||||
allowed-tools: Bash
|
||||
argument-hint: <source-branch> [issue-number-or-text]
|
||||
description: Création de branche Git avec workflow structuré
|
||||
---
|
||||
|
||||
# Création de branche Git
|
||||
|
||||
## Purpose
|
||||
Créer une nouvelle branche Git de manière structurée avec support des issues GitHub.
|
||||
|
||||
## Variables
|
||||
SOURCE_BRANCH: $1
|
||||
ISSUE_OR_TEXT: $2
|
||||
|
||||
## Instructions
|
||||
- Utilise les outils Bash pour les opérations Git
|
||||
- Valide que la branche source existe
|
||||
- Génère un nom de branche basé sur l'issue si fournie
|
||||
- Applique les conventions de nommage du projet
|
||||
|
||||
## Relevant Files
|
||||
- @.git/config
|
||||
- @.gitignore
|
||||
- @docs/README.md
|
||||
|
||||
## Workflow
|
||||
|
||||
**🚨 ÉTAPE CRITIQUE : CHECKOUT VERS SOURCE D'ABORD 🚨**
|
||||
|
||||
1. **Vérifier SOURCE_BRANCH obligatoire**
|
||||
- Si `SOURCE_BRANCH` n'est pas fourni → ARRÊTER et demander à l'utilisateur
|
||||
|
||||
2. **Valider SOURCE_BRANCH existe localement**
|
||||
- `git branch --list "$SOURCE_BRANCH"`
|
||||
- Si n'existe pas → ARRÊTER avec erreur
|
||||
|
||||
3. **🔴 CHECKOUT VERS SOURCE_BRANCH AVANT TOUT 🔴**
|
||||
- `git checkout $SOURCE_BRANCH`
|
||||
- Vérifier qu'on est bien dessus : `git branch --show-current`
|
||||
- **CRITIQUE** : Cette étape garantit qu'on crée depuis un point propre
|
||||
|
||||
4. **🔴 PULL POUR METTRE À JOUR SOURCE_BRANCH 🔴**
|
||||
- `git pull origin $SOURCE_BRANCH`
|
||||
- Garantit qu'on part du dernier commit de origin
|
||||
- **CRITIQUE** : Évite de créer depuis un point obsolète
|
||||
|
||||
5. **Générer nom de la nouvelle branche**
|
||||
- Si `ISSUE_OR_TEXT` est fourni :
|
||||
- Détecte si c'est un numéro (entier) ou du texte
|
||||
- Si c'est un numéro :
|
||||
- Récupère les informations de l'issue via GitHub CLI (`gh issue view ${ISSUE_OR_TEXT}`)
|
||||
- Génère un nom de branche : `issue/${ISSUE_OR_TEXT}-{titre-simplifie}`
|
||||
- Le titre est nettoyé (espaces -> tirets, caractères spéciaux supprimés, minuscules)
|
||||
- Si c'est du texte :
|
||||
- Génère un nom de branche : `feature/${ISSUE_OR_TEXT-simplifie}`
|
||||
- Le texte est nettoyé (espaces -> tirets, caractères spéciaux supprimés, minuscules)
|
||||
- Si pas de `ISSUE_OR_TEXT`, demande le nom de branche à l'utilisateur
|
||||
|
||||
6. **Vérifier que la nouvelle branche n'existe pas déjà**
|
||||
- `git branch --list "$NEW_BRANCH"`
|
||||
- Si existe déjà → ARRÊTER avec erreur
|
||||
|
||||
7. **Créer et checkout la nouvelle branche**
|
||||
- `git checkout -b $NEW_BRANCH`
|
||||
- La branche est créée depuis SOURCE_BRANCH (car on est dessus)
|
||||
|
||||
8. **NE PAS configurer de tracking automatiquement**
|
||||
- ❌ **INTERDIT** : `git branch --set-upstream-to=origin/$SOURCE_BRANCH $NEW_BRANCH`
|
||||
- ✅ Le tracking sera configuré automatiquement lors du premier push avec `-u`
|
||||
- ✅ Lors du push : `git push -u origin $NEW_BRANCH`
|
||||
- **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 :
|
||||
- `feature/nom-descriptif` : Nouvelles fonctionnalités
|
||||
- `fix/nom-bug` : Corrections de bugs
|
||||
- `issue/123-nom-descriptif` : Basé sur une issue GitHub
|
||||
- Utilise des tirets, pas d'espaces ni caractères spéciaux
|
||||
|
||||
## Template
|
||||
```bash
|
||||
# Exemple d'usage avec numéro d'issue :
|
||||
/git:branch main 42
|
||||
|
||||
# Résultat attendu :
|
||||
# - Récupère l'issue #42
|
||||
# - Titre: "Add user authentication system"
|
||||
# - Crée la branche: issue/42-add-user-authentication-system
|
||||
# - Checkout vers cette branche
|
||||
|
||||
# Exemple d'usage avec texte :
|
||||
/git:branch main "Add login form"
|
||||
|
||||
# Résultat attendu :
|
||||
# - Crée la branche: feature/add-login-form
|
||||
# - Checkout vers cette branche
|
||||
```
|
||||
|
||||
## Examples
|
||||
```bash
|
||||
# Créer une branche depuis main avec issue GitHub
|
||||
/git:branch main 123
|
||||
|
||||
# Créer une branche depuis main avec texte descriptif
|
||||
/git:branch main "user authentication"
|
||||
|
||||
# Créer une branche depuis develop sans argument supplémentaire
|
||||
/git:branch develop
|
||||
|
||||
# Créer une branche depuis une branche existante avec issue
|
||||
/git:branch feature/api-base 456
|
||||
|
||||
# Créer une branche fix depuis main avec texte
|
||||
/git:branch main "fix login bug"
|
||||
```
|
||||
|
||||
## Report
|
||||
- Nom de la branche créée
|
||||
- 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_BRANCH` doit exister localement
|
||||
- ✅ `SOURCE_BRANCH` est 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_TEXT` est 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/A` et on crée `feature/B` depuis `main`
|
||||
- Sans checkout vers `main` d'abord, la branche est créée depuis `feature/A`
|
||||
- Les commits de `feature/A` se retrouvent sur `feature/B`
|
||||
- Résultat : impossible de créer une PR propre
|
||||
|
||||
**Problème 2 évité** :
|
||||
- Si `main` locale est en retard sur `origin/main`
|
||||
- Sans pull, on crée depuis un point obsolète
|
||||
- Résultat : commits manquants, conflits, PR avec historique incorrect
|
||||
|
||||
**Solution** :
|
||||
1. TOUJOURS faire `git checkout $SOURCE_BRANCH`
|
||||
2. TOUJOURS faire `git pull origin $SOURCE_BRANCH`
|
||||
3. PUIS créer avec `git checkout -b $NEW_BRANCH`
|
||||
Reference in New Issue
Block a user