Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 17:58:54 +08:00
commit 4d6408436e
32 changed files with 3539 additions and 0 deletions

152
commands/branch.md Normal file
View 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`