Les trois zones
| Zone | Contenu | Y entrer | En ressortir |
|---|---|---|---|
| répertoire de travail | fichiers en cours d'édition | éditer | git restore <fichier> (perd les modifications) |
| index | prochain instantané | git add <fichier> | git restore --staged <fichier> |
dépôt (HEAD) | commits | git commit | git revert <commit> (nouveau commit) |
Objets : blob (contenu), arbre (noms et structure), commit (instantané + parents), référence (nom vers un commit). Une branche est un pointeur déplaçable vers un commit ; HEAD désigne la branche courante.
Lire sans rien modifier
| Besoin | Commande |
|---|---|
| état des fichiers | git status (-s : version courte) |
| modifié, non indexé | git diff |
| indexé, non commité | git diff --staged |
| historique en graphe | git log --oneline --decorate --graph --all |
| déplacements passés | git reflog |
| distants | git remote -v |
| motif qui ignore un fichier | git check-ignore -v <fichier> |
Branches et intégration
| Besoin | Commande | Remarque |
|---|---|---|
| créer et aller sur une branche | git switch -c <nom> | switch : Git 2.23 ou plus |
| revenir à la précédente | git switch - | |
| fusionner | git merge <branche> | avance rapide si possible |
| forcer un commit de fusion | git merge --no-ff <branche> | garde la trace |
| refuser toute fusion non triviale | git merge --ff-only <branche> | sortie non nulle sinon |
| rejouer ses commits | git rebase <base> | jamais sur des commits déjà partagés |
| supprimer une branche fusionnée | git branch -d <nom> | -D force : relire le nom |
Conflit
| Étape | Commande |
|---|---|
| voir les fichiers en conflit | git status (« Unmerged paths ») |
| marqueurs | <<<<<<< votre côté, =======, >>>>>>> l'autre côté |
| déclarer résolu | éditer, retirer les marqueurs, git add <fichier> |
| conclure | git commit ou git merge --continue |
| abandonner | git merge --abort ou git rebase --abort |
Annuler
| Situation | Solution sûre | Danger |
|---|---|---|
| fichier indexé par erreur | git restore --staged <fichier> | aucun |
| dernier commit local à corriger | git commit --amend | seulement si non poussé |
| commit publié à défaire | git revert <commit> (-m 1 pour une fusion) | aucun, ajoute un commit |
| sommet perdu après reset ou rebase | git reflog puis git switch -c <nom> <entrée> | seulement pour des commits déjà faits |
| modifications à mettre de côté | git stash push (-u : non suivis), git stash pop | stash drop et clear : peu récupérables |
Reflog : local au dépôt ; entrées conservées 90 jours (atteignables) et 30 jours (inatteignables) par défaut d'après la page consultée.
Distants (HTTPS)
| Besoin | Commande |
|---|---|
| ajouter | git remote add origin https://example.com/demo/projet-demo.git |
| télécharger sans fusionner | git fetch origin |
| fetch puis fusion | git pull |
| simuler l'envoi | git push --dry-run origin main |
| envoyer et suivre | git push -u origin main |
| retirer le distant | git remote remove origin |
Authentification HTTPS GitHub : jeton d'accès personnel, pas de mot de passe de compte. Assistants : cache (mémoire), osxkeychain (Trousseau), store (clair sur le disque, à éviter). Jamais de jeton dans l'URL.
.gitignore
| Motif | Sens |
|---|---|
# … | commentaire |
*.log | tout fichier .log (hors /) |
build/ | dossier seulement |
/TODO | ancré à la racine du .gitignore |
**/foo | foo à tout niveau |
!garder.log | ré-inclut |
N'agit pas sur un fichier déjà suivi : git rm --cached <fichier> puis commit. Autres sources de motifs : .git/info/exclude, core.excludesFile.
Commits
- Ligne de titre de 50 caractères au plus, ligne vide, corps qui dit le pourquoi.
- Un commit = un changement cohérent ; relire
git diff --stagedavant de valider. - Pas de
git add .aveugle ; pas de secret, de produit de génération ni de gros binaire.
Secret commité : ordre d'action
- Révoquer ou renouveler le secret tout de suite (le dépôt privé ne protège pas).
- Le considérer comme compromis ; prévenir
cyberagent. - Non poussé et dernier commit :
git reset --soft HEAD~, retirer le secret, recommiter. - Poussé : réécriture avec
git filter-repo(recommandé par la doc Git, qui déconseillefilter-branch) ; sauvegarde avant ; clones, forks et vues en cache peuvent garder la donnée. - Consigner dans
securite/registre.md.
Attention : opérations destructives
Attention : ces commandes détruisent du travail ou de l'historique distant, sans retour pour ce qui n'a jamais été commité.
| Commande | Perte | Prévisualiser |
|---|---|---|
git reset --hard | modifications non commitées (index et répertoire) | git status, git diff, git stash |
git restore <fichier> | modifications non commitées du fichier | git diff <fichier> |
git push --force | commits distants inconnus de vous | git push --dry-run ; préférer --force-with-lease |
git clean -f | fichiers non suivis, hors Corbeille | git clean -n puis -i |
-d : dossiers non suivis ; -x : fichiers ignorés aussi ; -X : seulement les ignorés ; deux -f pour un dépôt imbriqué.
Sources
Consultées le 17 octobre 2026 (Git 2.56.0 affichée par la documentation, Pro Git 2e édition).
- Git Reference (s’ouvre dans un nouvel onglet) — Pro Git, Reset Demystified (s’ouvre dans un nouvel onglet) — Pro Git, Undoing Things (s’ouvre dans un nouvel onglet)
- git-merge (s’ouvre dans un nouvel onglet) — git-rebase (s’ouvre dans un nouvel onglet) — git-restore (s’ouvre dans un nouvel onglet) — git-revert (s’ouvre dans un nouvel onglet)
- git-reflog (s’ouvre dans un nouvel onglet) — git-stash (s’ouvre dans un nouvel onglet) — git-push (s’ouvre dans un nouvel onglet) — git-clean (s’ouvre dans un nouvel onglet)
- gitignore (s’ouvre dans un nouvel onglet) — git-commit (s’ouvre dans un nouvel onglet) — git-filter-branch (s’ouvre dans un nouvel onglet)
- Pro Git, Credential Storage (s’ouvre dans un nouvel onglet) — GitHub Docs, remote repositories (s’ouvre dans un nouvel onglet) — GitHub Docs, removing sensitive data (s’ouvre dans un nouvel onglet)
Points non vérifiés : voir la section correspondante du cours Git (version de Git de Stéphane, branche par défaut, options usuelles non relues page par page).