1172 votes

Comment copier la version d'un seul fichier d'une branche Git à une autre ?

J'ai deux branches qui sont entièrement fusionnées ensemble.

Cependant, une fois la fusion effectuée, je me rends compte qu'un fichier a été endommagé par la fusion (quelqu'un d'autre a fait un auto-formatage, gah), et il serait plus facile de passer à la nouvelle version dans l'autre branche, puis de réinsérer mon changement d'une ligne après l'avoir transféré dans ma branche.

Alors, quel est le moyen le plus simple de le faire dans Git ?

9 votes

Veuillez noter que dans la réponse acceptée, la première solution met en scène les changements, et la deuxième solution ne le fait pas. stackoverflow.com/a/56045704/151841

1 votes

La réponse la plus récente est git restore --source otherbranch path/to/myfile.txt (voir l'explication dans la réponse ).

21voto

6ft Dan Points 285

Suivant La réponse de madlep Vous pouvez aussi simplement copier un répertoire d'une autre branche avec le blob de répertoire.

git checkout other-branch app/**

Pour répondre à la question de l'OP, si vous n'avez modifié qu'un seul fichier, cela fonctionnera parfaitement.

5voto

user151841 Points 3371

Veuillez noter que dans la réponse acceptée, la première option étapes le fichier entier de l'autre branche (comme git add ... a été effectuée), et que la deuxième option a pour seul résultat de copier le fichier, mais ne met pas en scène les modifications (comme si vous aviez juste édité le fichier manuellement et que des différences subsistaient).

Git copie un fichier d'une autre branche sans le mettre en scène

Des changements échelonnés (par exemple git add filename) :

$ git checkout directory/somefile.php feature-B

$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   directory/somefile.php

Changements en cours (pas de mise en scène ni d'engagement) :

$ git show feature-B:directory/somefile.php > directory/somefile.php

$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   directory/somefile.php

no changes added to commit (use "git add" and/or "git commit -a")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X