Ressources & Cheatsheets

Toutes les commandes, conventions et patterns Git en un seul endroit.

Tout
Git Base
Git Avancé
GitHub / Remote
GitHub Actions
Conventions
🌱 Git — Commandes de base

🚀 Initialisation & Configuration

git initInitialiser un dépôt
git clone <url>Cloner un dépôt distant
git config --global user.nameConfigurer le nom
git config --global user.emailConfigurer l'email
git config --listVoir toute la configuration

📂 Staging & Commit

git statusÉtat du working tree
git add .Stager tous les fichiers
git add -pStager par blocs (patch)
git commit -m "msg"Créer un commit
git commit --amendModifier le dernier commit
git stashMettre en cache les modifs
git stash popRestaurer le stash

🔍 Historique & Diff

git log --onelineHistorique compact
git log --graph --allArbre de branches ASCII
git diffDiff unstaged vs staging
git diff --stagedDiff staging vs HEAD
git show <hash>Détails d'un commit
git blame <file>Qui a écrit chaque ligne
git reflogHistorique de HEAD

↩️ Annuler des changements

git restore <file>Annuler modifs unstaged
git restore --staged <file>Désindexer un fichier
git revert HEADAnnuler sans réécrire l'historique
git reset --soft HEAD~1Défaire commit, garder staging
git reset --mixed HEAD~1Défaire commit et staging
git reset --hard HEAD~1⚠️ Défaire tout (irréversible)
🔄 Git — Commandes avancées

🌿 Branches

git branchLister les branches locales
git branch -aLocales + distantes
git switch -c feature/xCréer + basculer
git switch mainChanger de branche
git branch -d feature/xSupprimer (si mergée)
git branch -D feature/xForcer la suppression
git branch -m old newRenommer

🔀 Merge & Rebase

git merge feature/xMerge (avec FF si possible)
git merge --no-ff feature/xForcer un commit de merge
git merge --squash feature/xCondenser en un commit
git rebase mainRebaser sur main
git rebase -i HEAD~3Rebase 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 tagLister les tags
git show v1.2.0Détails du tag
git push origin --tagsPousser tous les tags
git push origin v1.2.0Pousser un tag précis
git tag -d v1.0.0Supprimer un tag local

🔎 Débogage avancé

git bisect startDémarrer la recherche binaire
git bisect badMarquer le commit courant mauvais
git bisect good v1.0Marquer un commit bon
git bisect resetTerminer la session bisect
git log -S "terme"Chercher dans le contenu des commits
git log --author="Alaa"Filtrer par auteur
🐙 GitHub & Remote

🔗 Remotes

git remote -vLister les remotes
git remote add origin <url>Ajouter un remote
git remote remove originSupprimer un remote
git fetch originTélécharger sans intégrer
git pull --rebaseFetch + rebase (historique linéaire)
git push -u origin mainPush + configurer tracking
git push --force-with-leaseForce push sécurisé

🔀 gh CLI — Pull Requests

gh pr createCréer une PR
gh pr listLister les PRs ouvertes
gh pr view 42Voir les détails de la PR #42
gh pr checkout 42Tester la PR en local
gh pr diff 42Voir le diff
gh pr review 42 --approveApprouver une PR
gh pr merge --squashMerger en squash

🏷️ gh CLI — Releases & Issues

gh release create v1.0.0Créer une release
gh release listLister les releases
gh issue createCréer une issue
gh issue listLister les issues
gh repo clone owner/repoCloner un dépôt
gh repo forkForker le dépôt courant

📋 Fichiers GitHub importants

.github/CODEOWNERSReviewers automatiques par fichier
.github/PULL_REQUEST_TEMPLATE.mdTemplate de description PR
.github/ISSUE_TEMPLATE/Templates d'issues
.github/workflows/*.ymlWorkflows GitHub Actions
.gitignoreFichiers exclus du suivi
.gitattributesRègles d'attributs par fichier
⚡ GitHub Actions — Syntaxe YAML

📄 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_requestOuverture/màj d'une PR
workflow_dispatchDéclenchement manuel
schedule: cron:Planification horaire
workflow_callAppelé par un autre workflow
release: types: [published]À la publication d'une release
issue_commentCommentaire sur une issue

🎛️ Options de jobs et steps

needs: [job-name]Dépendance entre jobs
if: conditionCondition d'exécution
environment: prodLier à un environnement
continue-on-error: trueNe pas bloquer si erreur
timeout-minutes: 30Timeout du job
runs-on: self-hostedRunner personnalisé
concurrency: groupÉviter les runs parallèles
📝 Conventions — Conventional Commits, SemVer & GitFlow

✍️ Conventional Commits — Types

feat fix docs style refactor test chore perf ci build
feat(scope): descNouvelle fonctionnalité → MINOR SemVer
fix(scope): descCorrection de bug → PATCH SemVer
feat!: descBreaking change → MAJOR SemVer
BREAKING CHANGE: footerBreaking change dans le footer
docs: descDocumentation uniquement
chore: descMaintenance, dépendances, config
refactor: descRestructuration sans nouvelle feature
perf: descAmélioration de performance
ci: descConfiguration CI/CD
test: descAjout 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