Skip to content

Instantly share code, notes, and snippets.

@nash403
Last active March 12, 2026 16:36
Show Gist options
  • Select an option

  • Save nash403/d7eb32d3edee17417adfbd2b441b3109 to your computer and use it in GitHub Desktop.

Select an option

Save nash403/d7eb32d3edee17417adfbd2b441b3109 to your computer and use it in GitHub Desktop.
Git: Restore changes of a specific file from a different branch or commit

Récupérer les changements d’un fichier d’une autre branche ou commit

Méthode la plus simple : prendre le fichier tel qu’il est sur l’autre branche

git checkout <autre-branche> -- <chemin/vers/fichier>

Exemple : tu es sur ma-branche et tu veux le fichier tel qu’il est sur develop :

git checkout develop -- packages/frontend/src/components/MainMenu.tsx
  • Le fichier est remplacé par la version de develop, puis mis en stage.
  • Tu n’as plus qu’à committer : git commit -m "…".

Variante : voir le contenu sans l’appliquer

git show <autre-branche>:<chemin/vers/fichier>

Pour l’écrire dans un fichier (par ex. pour comparer) :

git show develop:packages/frontend/src/components/MainMenu.tsx > MainMenu.develop.tsx

Si tu veux seulement un diff (patch) de ce fichier entre deux branches

git diff ma-branche..autre-branche -- <fichier> > patch.txt
git apply patch.txt

En résumé : pour “copier les changements d’un fichier ciblé d’une autre branche et les avoir sur la branche actuelle”, la commande à utiliser est git checkout <autre-branche> -- <fichier> puis un commit.


Tu peux mettre à la place de la branche n’importe quel tree-ish : nom de branche, tag ou SHA de commit.

Dans les deux cas, le fichier en working tree (et en stage avec checkout) est remplacé par la version à ce commit ; ta branche ne change pas.

Récupérer la version d’un fichier à un commit donné

Tu peux mettre à la place de la branche n’importe quel tree-ish : nom de branche, tag ou SHA de commit.

Avec git checkout (toutes versions de Git) :

# Fichier tel qu’à un commit précis (SHA complet ou court)
git checkout <commit-sha> -- <chemin/vers/fichier>

# Exemples
git checkout a1b2c3d -- packages/frontend/src/MainMenu.tsx
git checkout HEAD~2 -- packages/frontend/src/MainMenu.tsx   # il y a 2 commits
git checkout HEAD^ -- packages/frontend/src/MainMenu.tsx    # commit précédent

Avec git restore (Git 2.23+) :

git restore --source=<commit-sha> -- <chemin/vers/fichier>

# Exemples
git restore --source=a1b2c3d -- packages/frontend/src/MainMenu.tsx
git restore --source=HEAD~2 -- packages/frontend/src/MainMenu.tsx

Dans les deux cas, le fichier en working tree (et en stage avec checkout) est remplacé par la version à ce commit ; ta branche ne change pas.

Récap des tree-ish utiles

Référence Signification
nom-branche Dernier commit de la branche
abc1234 ou abc123 Commit avec ce SHA
HEAD~n n commits avant HEAD sur la branche actuelle
HEAD^ Commit parent (équivalent à HEAD~1)
HEAD~3 3 commits en arrière

Donc tu remplaces nom-branche par le SHA (ou par HEAD~n, etc.) et la commande fonctionne pareil pour “revert/restore” ce fichier à l’état de ce commit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment