Tutoriel Git
Mémo Git : les commandes Git expliquées simplement
57 fiches pour apprendre Git ou retrouver une commande : ce qu'elle fait, un cas d'usage, ses variantes en ligne de commande, les questions fréquentes et la marche à suivre dans Merathon. Les mises en garde signalent les gestes qui font perdre des données ou réécrivent l'historique.
Pour chercher par mot-clé, utilisez la recherche du mémo sur la page d'accueil.
Les questions les plus courantes
- Annuler le dernier commit sans perdre ses modifications
- Annuler un commit déjà poussé
- Modifier le message du dernier commit
- Annuler les modifications d'un fichier
- Supprimer une branche locale et distante
- Renommer une branche
- Résoudre un conflit de merge
- Regrouper plusieurs commits en un seul
- Forcer un push sans écraser le travail des autres
- Configurer une clé SSH pour GitHub ou GitLab
Démarrer
- Créer un dépôt
git initTransforme un dossier en dépôt git : l'historique est stocké dans son sous-dossier .git. - Cloner un dépôt
git clone <url>Télécharge un dépôt distant avec tout son historique et le relie à son remote « origin ». - Ouvrir un dépôt existant
cd <dossier>Un dépôt déjà présent sur le disque s'ouvre tel quel, dans l'onglet courant ou un nouvel onglet.
Modifications
- Voir l'état de la copie de travail
git statusListe les fichiers modifiés, ajoutés, supprimés ou non suivis, et ceux déjà indexés pour le prochain commit. - Voir les différences d'un fichier
git diff · git diff --stagedMontre ligne par ligne ce qui a changé, par rapport à l'index (non indexé) ou au dernier commit (indexé). - Indexer des fichiers
git add <fichier> · git add -APlace des modifications dans l'index : seul ce qui est indexé fera partie du prochain commit. - Indexer une partie d'un fichier
git add -pIndexe seulement certains blocs ou certaines lignes d'un fichier, le reste restant non indexé. - Désindexer
git restore --staged <fichier>Retire des modifications de l'index sans les perdre : elles redeviennent « non indexées ». - Annuler des modifications
git restore <fichier>Remet un fichier dans l'état de l'index : les modifications non indexées sont abandonnées. - Ignorer des fichiers
echo <motif> >> .gitignoreLes fichiers correspondant à un motif du .gitignore n'apparaissent plus comme non suivis. - Commiter
git commit -m <message>Enregistre le contenu de l'index comme un nouveau commit sur la branche courante. - Modifier le dernier commit
git commit --amendRemplace le dernier commit par un nouveau : message corrigé, fichiers ajoutés ou retirés.
Branches
- Créer une branche
git switch -c <branche>Crée une nouvelle ligne de développement à partir d'un commit, sans toucher aux autres branches. - Changer de branche
git switch <branche>Met la copie de travail dans l'état d'une autre branche, qui devient la branche courante. - Renommer une branche
git branch -m <ancien> <nouveau>Change le nom d'une branche locale sans modifier ses commits. - Supprimer une branche
git branch -D <branche> · git push origin --delete <branche>Retire une branche locale ou distante ; les commits déjà fusionnés ailleurs restent dans l'historique. - Lier une branche à une branche distante
git branch --set-upstream-to=origin/<branche>Définit la branche distante suivie : c'est elle que visent pull et push, et le compteur d'avance / retard. - Se placer sur un ancien commit
git switch --detach <commit>Met la copie de travail dans l'état d'un commit précis, sans branche (« HEAD détaché »).
Synchroniser
- Ajouter un remote
git remote add <nom> <url>Déclare un dépôt distant avec lequel échanger des commits. - Avoir une identité par dossier
git config --global includeIf."gitdir:~/dev/pro/".path ~/.gitconfig-proUne règle includeIf applique un fichier de configuration à tous les dépôts d'un dossier : même e-mail de commit et même clé SSH (core.sshCommand) sans rien régler dépôt par dépôt. Pour Merathon comme pour git en ligne de commande, le réglage propre à un dépôt passe avant la règle. - Configurer une clé SSH
ssh-keygen -t ed25519Une clé SSH remplace le token pour les dépôts dont le remote est en SSH (git@hôte:…). La clé privée reste sur ta machine ; seule la clé publique est enregistrée sur GitHub ou GitLab. À la première connexion, l'empreinte du serveur est vérifiée puis mémorisée dans ~/.ssh/known_hosts. - Récupérer les nouveautés sans les intégrer
git fetchTélécharge les commits et branches du remote sans modifier ta branche ni tes fichiers. - Intégrer les nouveautés du remote
git pull · git pull --rebaseRécupère les commits distants et les intègre à la branche courante, par merge ou par rebase. - Publier ses commits
git push · git push -u origin <branche>Envoie les commits de la branche courante vers le remote ; au premier push, la branche y est créée. - Forcer un push
git push --forceRemplace la branche distante par ta version locale, même si leurs historiques ont divergé.
Intégrer
- Fusionner une branche
git merge <branche>Intègre les commits d'une autre branche dans la branche courante, avec un commit de merge si nécessaire. - Rebaser une branche
git rebase <branche>Rejoue les commits de la branche courante par-dessus une autre, pour un historique linéaire. - Résoudre un conflit
git add <fichier> (après édition)Quand deux branches modifient les mêmes lignes, git s'arrête et te demande quelle version garder. - Abandonner un merge ou un rebase
git merge --abort · git rebase --abortAnnule l'opération en cours et remet la branche dans l'état d'avant. - Reprendre un commit d'une autre branche
git cherry-pick <commit>Copie les modifications d'un commit précis sur la branche courante. - Annuler un commit publié
git revert <commit>Crée un nouveau commit qui défait les modifications d'un ancien, sans réécrire l'historique. - Ouvrir une pull request
gh pr create · glab mr createPropose les commits d'une branche à la relecture sur GitHub (pull request) ou GitLab (merge request). - Lier une issue à une pull request
#12 · Closes #12 (dans la description)#12 dans la description crée un lien vers l'issue ; « Closes #12 » la ferme en plus au merge, sur GitHub comme sur GitLab.
Réécrire l'historique
- Rebase interactif
git rebase -i <commit>Réorganise une série de commits : réordonner, renommer, fusionner, modifier ou supprimer. - Regrouper des commits
git rebase -i (squash)Fusionne plusieurs commits en un seul, à la place du plus ancien. - Revenir à un commit antérieur
git reset --soft | --mixed | --hard <commit>Déplace la branche courante sur un autre commit. Soft garde tout indexé, mixed garde les fichiers modifiés, hard efface tout.
Mettre de côté
- Mettre de côté ses modifications
git stash push -u -m <message>Range les modifications en cours dans une réserve et remet la copie de travail au propre. - Reprendre un stash
git stash pop · git stash applyRéapplique des modifications mises de côté ; « pop » les retire aussi de la réserve. - Supprimer un stash
git stash dropRetire un stash de la réserve sans l'appliquer.
Tags
- Créer un tag
git tag -a <nom> -m <message>Pose une étiquette fixe sur un commit, en général pour marquer une version. - Publier un tag
git push origin <tag>Les tags ne partent pas avec un push ordinaire : ils se poussent explicitement. - Supprimer un tag
git tag -d <tag> · git push origin --delete <tag>Retire un tag en local, et séparément sur le remote.
Explorer
- Parcourir l'historique
git log --graph --allAffiche les commits et la façon dont les branches se séparent et se rejoignent. - Voir le contenu d'un commit
git show <commit>Affiche le message, l'auteur et les fichiers modifiés par un commit. - Voir les commandes exécutéesChaque action de l'application est consignée avec la commande git équivalente.
- Tout le reste, en ligne de commande
git blame · git bisect · git reflog · git clean …Les commandes sans bouton dédié restent accessibles dans le terminal intégré, ouvert dans le dépôt.
Worktrees
- Comprendre les worktrees
git worktree listUn worktree est une copie de travail supplémentaire du même dépôt, dans un autre dossier et sur une autre branche. Tous partagent les commits, les branches, les tags, les remotes et les stashs : un commit fait dans l'un est aussitôt visible dans les autres, sans push ni fetch. Chacun garde ses propres fichiers, son index et sa branche courante. Le dossier d'origine est le worktree principal ; dans les autres, .git est un simple fichier qui pointe vers le dépôt principal, sans second historique. - Créer un worktree sur une nouvelle branche
git worktree add -b <branche> <dossier>Crée la branche depuis le commit courant, puis l'extrait dans un nouveau dossier. - Extraire une branche existante dans un worktree
git worktree add <dossier> <branche>Extrait une branche locale déjà créée dans un nouveau dossier, sans changer de branche là où tu es. - Passer d'un worktree à l'autre
cd <dossier>Chaque worktree est un dossier distinct : y aller suffit, rien n'est réécrit sur le disque, contrairement à un changement de branche. - Retrouver le worktree d'une branche
git worktree listUne branche ne peut être extraite que dans un seul worktree à la fois : sinon, un commit dans l'un déplacerait la branche sous les fichiers de l'autre. Ailleurs, elle ne peut donc être ni extraite, ni avancée, ni supprimée. - Supprimer un worktree
git worktree remove <dossier>Supprime le dossier et sa référence dans le dépôt. La branche et ses commits restent : tu peux la rouvrir plus tard, ou la supprimer à part. - Nettoyer un worktree disparu
git worktree pruneSi le dossier a été supprimé ou déplacé hors de git, le dépôt garde sa référence et sa branche reste considérée comme extraite. Il faut retirer cette référence. - Déplacer ou verrouiller un worktree
git worktree move <dossier> <nouveau-dossier> ; git worktree lock <dossier>move déplace le dossier en gardant le lien avec le dépôt. lock le protège de la suppression et du nettoyage, par exemple s'il est sur un disque externe ; git worktree unlock lève la protection.
Sous-modules et LFS
- Initialiser et mettre à jour les sous-modules
git submodule update --initRécupère les dépôts imbriqués au commit enregistré par le dépôt parent. - Suivre de gros fichiers avec Git LFS
git lfs track <motif>Stocke les fichiers volumineux hors de l'historique, qui n'en garde qu'un pointeur. - Récupérer les fichiers LFS
git lfs pullTélécharge le contenu réel des fichiers LFS de la révision courante.