Skills/modern-git-workflow/references/git-commands-cheat-sheet.md

5.3 KiB

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 -- <file> ou git reset HEAD <file>.

Opération Commande Moderne Description
Désindexer un fichier (unstage) git restore --staged <fichier> 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 <fichier> Remet le fichier à l'état du dernier commit (attention : irréversible).
Restaurer un fichier depuis une autre branche git restore --source origin/main -- <fichier> 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 <fichier_résolu>.
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 :

# 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