Ressources & Cheatsheets
Toutes les commandes, conventions et patterns Git en un seul endroit.
🚀 Initialisation & Configuration
| git init | Initialiser un dépôt |
| git clone <url> | Cloner un dépôt distant |
| git config --global user.name | Configurer le nom |
| git config --global user.email | Configurer l'email |
| git config --list | Voir toute la configuration |
📂 Staging & Commit
| git status | État du working tree |
| git add . | Stager tous les fichiers |
| git add -p | Stager par blocs (patch) |
| git commit -m "msg" | Créer un commit |
| git commit --amend | Modifier le dernier commit |
| git stash | Mettre en cache les modifs |
| git stash pop | Restaurer le stash |
🔍 Historique & Diff
| git log --oneline | Historique compact |
| git log --graph --all | Arbre de branches ASCII |
| git diff | Diff unstaged vs staging |
| git diff --staged | Diff staging vs HEAD |
| git show <hash> | Détails d'un commit |
| git blame <file> | Qui a écrit chaque ligne |
| git reflog | Historique de HEAD |
↩️ Annuler des changements
| git restore <file> | Annuler modifs unstaged |
| git restore --staged <file> | Désindexer un fichier |
| git revert HEAD | Annuler sans réécrire l'historique |
| git reset --soft HEAD~1 | Défaire commit, garder staging |
| git reset --mixed HEAD~1 | Défaire commit et staging |
| git reset --hard HEAD~1 | ⚠️ Défaire tout (irréversible) |
🌿 Branches
| git branch | Lister les branches locales |
| git branch -a | Locales + distantes |
| git switch -c feature/x | Créer + basculer |
| git switch main | Changer de branche |
| git branch -d feature/x | Supprimer (si mergée) |
| git branch -D feature/x | Forcer la suppression |
| git branch -m old new | Renommer |
🔀 Merge & Rebase
| git merge feature/x | Merge (avec FF si possible) |
| git merge --no-ff feature/x | Forcer un commit de merge |
| git merge --squash feature/x | Condenser en un commit |
| git rebase main | Rebaser sur main |
| git rebase -i HEAD~3 | Rebase interactif (3 commits) |
| git cherry-pick <hash> | Appliquer un commit précis |
🔖 Tags & Versions
| git tag -a v1.2.0 -m "msg" | Tag annoté SemVer |
| git tag | Lister les tags |
| git show v1.2.0 | Détails du tag |
| git push origin --tags | Pousser tous les tags |
| git push origin v1.2.0 | Pousser un tag précis |
| git tag -d v1.0.0 | Supprimer un tag local |
🔎 Débogage avancé
| git bisect start | Démarrer la recherche binaire |
| git bisect bad | Marquer le commit courant mauvais |
| git bisect good v1.0 | Marquer un commit bon |
| git bisect reset | Terminer la session bisect |
| git log -S "terme" | Chercher dans le contenu des commits |
| git log --author="Alaa" | Filtrer par auteur |
🔗 Remotes
| git remote -v | Lister les remotes |
| git remote add origin <url> | Ajouter un remote |
| git remote remove origin | Supprimer un remote |
| git fetch origin | Télécharger sans intégrer |
| git pull --rebase | Fetch + rebase (historique linéaire) |
| git push -u origin main | Push + configurer tracking |
| git push --force-with-lease | Force push sécurisé |
🔀 gh CLI — Pull Requests
| gh pr create | Créer une PR |
| gh pr list | Lister les PRs ouvertes |
| gh pr view 42 | Voir les détails de la PR #42 |
| gh pr checkout 42 | Tester la PR en local |
| gh pr diff 42 | Voir le diff |
| gh pr review 42 --approve | Approuver une PR |
| gh pr merge --squash | Merger en squash |
🏷️ gh CLI — Releases & Issues
| gh release create v1.0.0 | Créer une release |
| gh release list | Lister les releases |
| gh issue create | Créer une issue |
| gh issue list | Lister les issues |
| gh repo clone owner/repo | Cloner un dépôt |
| gh repo fork | Forker le dépôt courant |
📋 Fichiers GitHub importants
| .github/CODEOWNERS | Reviewers automatiques par fichier |
| .github/PULL_REQUEST_TEMPLATE.md | Template de description PR |
| .github/ISSUE_TEMPLATE/ | Templates d'issues |
| .github/workflows/*.yml | Workflows GitHub Actions |
| .gitignore | Fichiers exclus du suivi |
| .gitattributes | Règles d'attributs par fichier |
📄 Structure d'un workflow complet
name: CI/CD Pipeline on: push: branches: [main, develop] pull_request: branches: [main] workflow_dispatch: # Déclenchement manuel schedule: - cron: '0 8 * * 1' # Lundi 8h UTC jobs: test: runs-on: ubuntu-latest strategy: matrix: node: [18, 20] fail-fast: false steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} cache: npm - run: npm ci - run: npm test env: API_KEY: ${{ secrets.API_KEY }} deploy: needs: [test] runs-on: ubuntu-latest if: github.ref == 'refs/heads/main' environment: production steps: - uses: actions/checkout@v4 - run: echo "Deploying to production..."
🔑 Contextes & Expressions
| ${{ secrets.NAME }} | Accéder à un secret |
| ${{ github.ref }} | Nom de la ref (branche/tag) |
| ${{ github.sha }} | SHA du commit |
| ${{ github.actor }} | Utilisateur déclencheur |
| ${{ github.event_name }} | Type d'événement (push, pr…) |
| ${{ matrix.node }} | Valeur de la matrice |
| ${{ env.MY_VAR }} | Variable d'environnement |
| ${{ GITHUB_TOKEN }} | Token automatique du workflow |
⚙️ Déclencheurs (on:)
| push | À chaque push |
| pull_request | Ouverture/màj d'une PR |
| workflow_dispatch | Déclenchement manuel |
| schedule: cron: | Planification horaire |
| workflow_call | Appelé par un autre workflow |
| release: types: [published] | À la publication d'une release |
| issue_comment | Commentaire sur une issue |
🎛️ Options de jobs et steps
| needs: [job-name] | Dépendance entre jobs |
| if: condition | Condition d'exécution |
| environment: prod | Lier à un environnement |
| continue-on-error: true | Ne pas bloquer si erreur |
| timeout-minutes: 30 | Timeout du job |
| runs-on: self-hosted | Runner personnalisé |
| concurrency: group | Éviter les runs parallèles |
✍️ Conventional Commits — Types
| feat(scope): desc | Nouvelle fonctionnalité → MINOR SemVer |
| fix(scope): desc | Correction de bug → PATCH SemVer |
| feat!: desc | Breaking change → MAJOR SemVer |
| BREAKING CHANGE: footer | Breaking change dans le footer |
| docs: desc | Documentation uniquement |
| chore: desc | Maintenance, dépendances, config |
| refactor: desc | Restructuration sans nouvelle feature |
| perf: desc | Amélioration de performance |
| ci: desc | Configuration CI/CD |
| test: desc | Ajout ou modification de tests |
📦 SemVer — MAJOR.MINOR.PATCH
MAJOR : breaking change — v1.0.0 → v2.0.0
MINOR : nouvelle feature rétrocompatible — v1.0.0 → v1.1.0
PATCH : bugfix — v1.0.0 → v1.0.1
Pre-release : v1.0.0-alpha.1, v2.0.0-rc.1
🌿 GitFlow — Branches
main : production stable, tags de release
develop : intégration des features
feature/nom : nouvelle fonctionnalité
release/x.y.z : stabilisation avant release
hotfix/x.y.z : correctif urgent depuis main
🔀 GitHub Flow — Règles
main est toujours déployable
Une branche = une feature ou un fix
PR obligatoire avant tout merge dans main
Déployer depuis main immédiatement après merge
Branches courtes (< quelques jours)
🚀 Trunk-Based Dev — Principes
Commits fréquents sur main (trunk)
Branches de courte durée : < 24h
Feature flags pour masquer le code incomplet
CI obligatoire : tests auto avant merge
Déploiement continu automatisé depuis main
🪝 Git Hooks utiles
commit-msg : valider le format du message
pre-commit : lint, tests rapides
pre-push : tests complets avant push
post-merge : npm install si package.json changé
Emplacement : .git/hooks/ ou Husky
📋 CODEOWNERS — Syntaxe
* @equipe-dev — tous les fichiers
*.tsx @equipe-frontend — par extension
src/api/ @equipe-backend — par répertoire
.github/ @equipe-devops — CI/CD
Le dernier pattern gagne en cas de conflit