88 lines
5.3 KiB
Markdown
88 lines
5.3 KiB
Markdown
# 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 :
|
|
|
|
```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
|
|
```
|