262 votes

Comment fusionner des fichiers spécifiques à partir de branches Git ?

J'ai 2 branches git branch1 et branch2 et je veux fusionner file.py dans branch2 en file.py dans branch1 et seulement ce fichier.

En fait, je veux juste travailler sur le fichier.py de la branche 1 mais je veux profiter de la commande de fusion. Quelle est la meilleure façon de procéder ?

1voto

xmnt Points 11

Le checkout de Git fournit un --merge pour cette

git checkout --merge branch2 file.py

Avec cette option, une fusion en conflit est recréée.

Sinon, quand une nouvelle fusion devrait avoir lieu à la place :

# Detach and overwrite file.py with content from branch2 
git checkout --detach
git checkout branch2 file.py

# Amend changes and switch back
git commit --amend --no-edit
git checkout -

# Merge the detached branch back in
git merge --no-commit -

0voto

Trac Nguyen Points 464

Je suis dans la même situation, je veux fusionner un fichier d'une branche qui a beaucoup de commits sur elle sur 2 branches. J'ai essayé plusieurs méthodes ci-dessus et d'autres que j'ai trouvées sur internet et toutes ont échoué (parce que l'historique des commits est complexe) donc j'ai décidé de faire à ma façon (la méthode folle).

git merge <other-branch>
cp file-to-merge file-to-merge.example
git reset --hard HEAD (or HEAD^1 if no conflicts happen)
cp file-to-merge.example file-to-merge

0voto

Lucas Lima Points 642

Ce que j'ai fait est un peu manuel, mais je.. :

  1. Fusionné les branches normalement ; Annulé la fusion avec revert ;
  2. J'ai vérifié tous mes fichiers pour HEAD~1 c'est-à-dire leur état dans le fusion ;
  3. J'ai reformaté mes commits pour cacher ce piratage à la historique de commit.

Moche ? Oui. Facile à retenir ? Oui aussi.

0voto

techniao Points 1

Si git checkout --patch branch2 file.py va être accepté, alors je devrais partager que nous pouvons également utiliser :

git difftool <branch> [-- <file>]

( [] signifie facultatif).

Si elle est configurée pour diff.tool des outils de fusion comme meld vous permettra de fusionner manuellement deux fichiers à l'aide d'une interface graphique.

Une faiblesse est qu'il ne pourra pas copier ou supprimer un fichier s'il n'existe pas dans l'une des branches. Dans ce cas, nous devons git checkout branch2 -- file.py .

git difftool ne préserve pas non plus l'histoire.

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