HOWTO · Git

Extraire un commit spécifique du référentiel Git

Cet article présente les commandes Git adaptées pour appliquer, examiner, fusionner ou réinitialiser une branche à un commit précis, avec des explications claires et des conseils de sécurité.

Sur cette page

Pour appliquer les changements d’un commit à la branche actuelle, récupérez l’historique distant, puis utilisez git cherry-pick <commit-id>. Créez une branche à partir de ce commit si vous voulez examiner son état historique ou poursuivre le travail depuis celui-ci. Utilisez git merge ou git pull pour intégrer l’historique d’une branche, qui peut aussi contenir des commits antérieurs. Utilisez git reset uniquement si vous souhaitez déplacer votre branche actuelle vers un point antérieur.

Choisir la bonne opération pour un commit précis

Ces opérations produisent des résultats différents. git cherry-pick applique à votre branche actuelle les changements introduits par le commit sélectionné, sous la forme d’un nouveau commit. Créer une branche à partir d’un commit permet de commencer à travailler depuis cet instantané. La fusion d’un commit intègre l’historique qu’il rend accessible et qui n’est pas déjà présent. git pull récupère les données d’un dépôt distant et les intègre selon le comportement configuré. git reset déplace la référence de la branche actuelle ; l’option --hard remplace aussi l’arbre de travail et l’index. Choisissez selon que vous voulez appliquer un changement, repartir d’un état historique, intégrer l’historique distant ou ramener une branche à un état antérieur.

Trouver le hachage d’un commit

Exécutez git log pour afficher les identifiants, les auteurs et les messages des commits. Pour obtenir une liste compacte, utilisez git log --oneline. Copiez l’identifiant affiché pour le commit voulu ; Git accepte aussi bien un identifiant abrégé sans ambiguïté que l’identifiant complet de l’objet. Si le commit n’existe que sur un dépôt distant, commencez par le récupérer avec git fetch origin, puis examinez l’historique mis à jour. Remplacez origin par le nom de votre dépôt distant et <commit-id> par l’identifiant choisi.

Appliquer un commit avec git cherry-pick

Récupérez la branche distante ou ses objets, puis appliquez le commit choisi en exécutant git fetch origin, suivi de git cherry-pick <commit-id>. C’est la méthode directe pour appliquer les changements d’un seul commit sans fusionner toute une branche. L’exemple local suivant crée un commit sur une branche de travail, puis l’applique à main :

repo=$(mktemp -d)
trap 'rm -rf "$repo"' EXIT
git -C "$repo" init -q -b main
git -C "$repo" config user.name "Example User"
git -C "$repo" config user.email "example@example.com"
printf 'base\n' > "$repo/notes.txt"
git -C "$repo" add notes.txt
git -C "$repo" commit -qm "Add notes"
git -C "$repo" switch -q -c topic
printf 'one change\n' >> "$repo/notes.txt"
git -C "$repo" add notes.txt
git -C "$repo" commit -qm "Add one change"
commit_id=$(git -C "$repo" rev-parse HEAD)
git -C "$repo" switch -q main
git -C "$repo" cherry-pick "$commit_id"
printf 'Applied one commit to main.\n'
[main 5ede2b1] Add one change
 Date: Mon Oct 26 03:50:14 2026 +0000
 1 file changed, 1 insertion(+)
Applied one commit to main.

En cas de conflit, résolvez les fichiers signalés, indexez les résolutions avec git add, puis poursuivez avec git cherry-pick --continue. Pour arrêter l’opération et revenir à l’état précédent, utilisez git cherry-pick --abort. Terminez ou annulez l’opération avant d’en commencer une autre.

Créer une branche à partir d’un commit précis

Pour examiner un commit ou poursuivre le travail depuis celui-ci sans déplacer votre branche actuelle, récupérez le dépôt distant puis exécutez git checkout -b review-branch <commit-id>. Cette commande crée la branche review-branch à ce commit et bascule dessus. La branche contient l’historique de ce commit ; les commits ultérieurs d’une autre branche n’y figurent pas, sauf si vous les fusionnez ou les appliquez avec cherry-pick.

Récupérer et fusionner un commit distant

Exécutez git fetch origin pour mettre à jour les références de suivi du dépôt distant sans les intégrer. Utilisez ensuite git merge <commit-id> pour fusionner le commit sélectionné ainsi que les éléments de son historique accessible qui manquent à votre branche actuelle. La fusion peut inclure des commits ancêtres : elle n’équivaut donc pas à appliquer uniquement le changement sélectionné. Utilisez git log --oneline --graph --decorate pour examiner l’historique obtenu.

Utiliser git pull avec le hachage d’un commit

Un dépôt distant peut autoriser la récupération d’un identifiant de commit brut si l’objet est accessible et si le serveur accepte la requête. Comme la prise en charge varie, git pull origin <commit-id> ne constitue pas une méthode portable pour sélectionner un seul changement. Si la commande est acceptée, git pull récupère les données et les intègre selon votre configuration ; cela ne signifie pas « appliquer uniquement ce commit ». Pour un changement unique, récupérez-le puis appliquez-le avec cherry-pick. Sinon, récupérez une branche nommée et utilisez git pull ou git merge sur cette branche.

Réinitialiser une branche à un commit précis

Utilisez git reset --hard <commit-id> uniquement si vous souhaitez déplacer la branche actuelle et remplacer l’index ainsi que l’arbre de travail par l’état de ce commit. Cette commande peut supprimer les modifications non validées. Si vous poussez ensuite la branche déplacée, vos collaborateurs devront peut-être réconcilier l’historique partagé réécrit. Vérifiez git status et sauvegardez tout travail à conserver avant la réinitialisation. Pour annuler un changement plus prudemment tout en préservant l’historique publié, utilisez git revert <commit-id> afin de créer un nouveau commit qui inverse le changement sélectionné.

Questions fréquentes

Comment trouver l’identifiant d’un commit ? Utilisez git log ou git log --oneline ; commencez par récupérer le dépôt distant si le commit n’y est disponible.

Que faire si cherry-pick signale des conflits ? Résolvez et indexez chaque fichier, puis exécutez git cherry-pick --continue ; utilisez git cherry-pick --abort pour annuler.

Peut-on appliquer plusieurs commits avec cherry-pick ? Oui. Indiquez plusieurs identifiants à git cherry-pick dans l’ordre voulu, ou utilisez une plage de commits après avoir vérifié quels commits ses deux bornes incluent.

Reset et revert sont-ils équivalents ? Non. git reset déplace la référence de la branche et peut remplacer les fichiers locaux ; git revert crée un nouveau commit qui annule un changement antérieur.