5.3 KiB
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