# Aide-Mémoire des Commandes Git Modernes Ce mémento rassemble les commandes recommandées par les standards actuels de l'ingénierie logicielle, privilégiant les commandes spécialisées introduites dans les versions récentes de Git (`switch`, `restore`, `stash push -u`, `--force-with-lease`). --- ## 1. Gestion des Branches (`git switch`) Depuis Git 2.23+, `git switch` remplace `git checkout` pour toutes les manipulations de branches. | Opération | Commande Moderne | Éviter (Obsolète / Ambigu) | | :--- | :--- | :--- | | **Créer & basculer sur une feature branch** | `git switch -c feat/nom-feature` | `git checkout -b ...` | | **Créer une branche depuis `origin/main` à jour** | `git switch -c feat/nom-feature origin/main` | `git checkout -b ... origin/main` | | **Revenir sur la branche principale** | `git switch main` | `git checkout main` | | **Bascule rapide sur la branche précédente** | `git switch -` | `git checkout -` | | **Supprimer une branche locale fusionnée** | `git branch -d feat/nom-feature` | `git branch -D ...` *(sauf abandon explicite)* | | **Nettoyer les références de branches supprimées à distance** | `git remote prune origin` ou `git fetch --prune` | | --- ## 2. Annulation & Restauration de Fichiers (`git restore`) `git restore` remplace les usages dangereux de `git checkout -- ` ou `git reset HEAD `. | Opération | Commande Moderne | Description | | :--- | :--- | :--- | | **Désindexer un fichier (unstage)** | `git restore --staged ` | Retire le fichier du staging sans perdre les modifications locales. | | **Désindexer tous les fichiers stagés** | `git restore --staged .` | Équivalent propre de `git reset`. | | **Annuler les modifications locales d'un fichier** | `git restore ` | Remet le fichier à l'état du dernier commit (attention : irréversible). | | **Restaurer un fichier depuis une autre branche** | `git restore --source origin/main -- ` | Récupère la version exacte d'un fichier depuis `main`. | --- ## 3. Protocole Stash Sécurisé (`git stash push`) | Opération | Commande Moderne | Pourquoi ? | | :--- | :--- | :--- | | **Stasher avec nom et fichiers untracked** | `git stash push -u -m "contexte explicite"` | `-u` inclut les nouveaux fichiers créés ; le message évite les stash anonymes orphelins. | | **Stasher uniquement certains fichiers** | `git stash push -m "contexte" path/to/file` | Isole une modification sans stasher tout le répertoire. | | **Lister les stashes existants** | `git stash list` | Affiche l'index et les libellés descriptifs. | | **Consulter le contenu d'un stash** | `git stash show -p stash@{0}` | Affiche le diff exact contenu dans le stash avant de l'appliquer. | | **Restaurer et supprimer le stash (dépilage)** | `git stash pop` | Réapplique les modifications et supprime l'entrée de la liste. | | **Restaurer sans supprimer de la liste** | `git stash apply stash@{0}` | Utile pour tester l'application d'un stash sans le détruire. | | **Supprimer un stash spécifique** | `git stash drop stash@{0}` | Nettoie un stash devenu inutile. | | **Vider intégralement tous les stashes** | `git stash clear` | À utiliser avec précaution après vérification de `git stash list`. | --- ## 4. Rebase, Nettoyage & Synchronisation | Opération | Commande Moderne | Description | | :--- | :--- | :--- | | **Mettre à jour la cible distante** | `git fetch origin main` | Récupère les derniers commits distants sans toucher à l'arbre local. | | **Rebaser la branche courante sur `origin/main`** | `git rebase origin/main` | Rejoue les commits locaux au-dessus de `origin/main`. | | **Rebase interactif des N derniers commits** | `git rebase -i HEAD~N` | Permet de fusionner (`squash`), renommer (`reword`) ou réordonner les commits locaux. | | **Poursuivre le rebase après résolution de conflit** | `git rebase --continue` | Après avoir fait `git add `. | | **Annuler un rebase en cours** | `git rebase --abort` | Restaure immédiatement la branche à son état pré-rebase. | --- ## 5. Push Sécurisé & Intégration | Opération | Commande Moderne | Danger de l'alternative | | :--- | :--- | :--- | | **Pousser une nouvelle feature branch** | `git push -u origin feat/nom-feature` | Configure l'upstream pour les prochains `git push`/`git pull`. | | **Pousser après un rebase local** | `git push --force-with-lease origin feat/nom-feature` | **CRITIQUE** : `--force-with-lease` refuse d'écraser le remote si un collègue a poussé des commits entre-temps, évitant la perte de code provoquée par `--force`. | | **Vérifier les commits prêts à être poussés** | `git log origin/main..HEAD --oneline` | Affiche uniquement les commits propres à votre branche non encore fusionnés sur `main`. | --- ## 6. Alternative Avancée au Stash : `git worktree` Pour travailler en parallèle sur un correctif urgent sans stasher ni changer de branche dans le dossier courant : ```bash # 1. Créer un dossier de travail dédié pour la nouvelle branche git worktree add ../mon-projet-hotfix -b fix/urgent-auth-bug origin/main # 2. Travailler dans le dossier ../mon-projet-hotfix de manière complètement isolée cd ../mon-projet-hotfix # ... commits, tests, push ... # 3. Une fois terminé et la PR ouverte, nettoyer le worktree cd ../mon-projet git worktree remove ../mon-projet-hotfix ```