Aide-mémoire Git
Se configurer, une fois pour toutes
Démarrer
La boucle de la journée
Quatre commandes, dans cet ordre, et elles suffisent à presque tout.
add ; le dépôt, ce qui est enregistré par commit. Presque toutes les commandes d'annulation se lisent comme « ramener quelque chose d'une zone vers la précédente », et savoir de quelle zone il s'agit suffit à choisir la bonne.
Regarder ce qui s'est passé
Les branches
Travailler avec les autres
En cas de conflit, Git s'arrête et marque les fichiers concernés. La marche à suivre est toujours la même : ouvrir chaque fichier, choisir ce qui reste entre les repères, effacer les repères, puis git add le fichier et git commit.
Je me suis trompé
C'est la section à mettre en signet. Elle est rangée par ce qu'on veut défaire.
| Ce qu'on veut | La commande |
|---|---|
| Annuler mes modifications d'un fichier, non préparées | git restore fichier |
| Retirer un fichier de la préparation, sans perdre les changements | git restore --staged fichier |
| Corriger le message du dernier commit | git commit --amend -m "nouveau message" |
| Ajouter un oubli au dernier commit | git add oubli puis git commit --amend --no-edit |
| Annuler le dernier commit, garder les changements | git reset --soft HEAD~1 |
| Annuler le dernier commit et les changements | git reset --hard HEAD~1 |
| Annuler un commit déjà envoyé, proprement | git revert <commit> |
| Mettre mon travail de côté un instant | git stash puis git stash pop |
| Récupérer un commit perdu | git reflog puis git reset --hard <commit> |
reset réécrit l'histoire : il convient tant que les commits n'ont pas été envoyés. revert ajoute un commit qui défait le précédent, et c'est le seul choix acceptable sur une branche partagée. Réécrire une histoire que d'autres ont déjà récupérée les oblige à réparer leur copie, et c'est la manœuvre qui fâche une équipe.
git reflog garde la trace de toutes les positions par lesquelles le dépôt est passé, y compris celles qu'aucune branche ne désigne plus. Un reset --hard malheureux se répare presque toujours en y retrouvant l'identifiant d'avant, puis en s'y replaçant. C'est la première chose à essayer avant de conclure qu'un travail a disparu.
Ce qui se trompe le plus souvent
| Le piège | Ce qu'il faut faire |
|---|---|
reset sur une branche partagée | revert, qui ajoute un commit au lieu de réécrire |
.gitignore posé trop tard | git rm --cached fichier pour cesser de le suivre |
| Un secret enregistré puis retiré | le considérer comme divulgué et le changer |
git add . sans regarder | git status puis git diff avant chaque commit |
Un reset --hard malheureux | git reflog, qui garde tout pendant trente jours |
| Un conflit qu'on ferme sans relire | chercher les repères restants avant de valider |
Ne pas versionner n'importe quoi
Un fichier .gitignore à la racine, une ligne par motif.
.gitignore ne le retire pas du dépôt s'il y a déjà été enregistré : Git continue de suivre ce qu'il suit. Il faut l'en sortir explicitement, en gardant le fichier sur le disque.
Un secret déjà enregistré, lui, reste dans l'historique même après cette manœuvre. Le seul réflexe sûr est de le considérer comme divulgué et de le changer.
Pour aller plus loin
La gestion de versions avec Git explique ce que Git range et pourquoi, Git au quotidien déroule la journée type et les quatre façons d'annuler, et Travailler à plusieurs traite des branches, des conflits et de la revue.
Version imprimable : les tables de syntaxe seules, sur une feuille.
Les autres aide-mémoire sont sur cette page, et les exercices dans Pratiquer.