849 votes

Comment git-choisir seuls changements à certains fichiers ?

Si je veux fusionner en une branche Git les changements à certains des fichiers modifiés dans un commit qui comprend des modifications à plusieurs fichiers, comment cela peut-il être atteint?

Supposons que le Git commit appelés stuff a des changements à des fichiers A, B, C, et D , mais je veux fusionner seulement stuff's les modifications apportées aux fichiers A et B. Cela ressemble à un travail pour git cherry-pick mais cherry-pick ne sait comment fusionner ensemble s'engage, pas un sous-ensemble des fichiers.

967voto

Jefromi Points 127932

Je le ferais avec ( ) qui vous permet de contrôler (et modifier) le résultat avant de s’engager :

Si la grande majorité des modifications est des choses que vous ne voulez pas, au lieu de vérifier les voies individuelles (étape intermédiaire), vous pouvez réinitialiser tout remettre, puis ajouter dans ce que vous voulez :

53voto

Mark Longair Points 93104

L’avantage de cette méthode sur la réponse de Jefromi est peut-être que vous n’avez pas oublier quel comportement de git reset est celui de droite  :)

48voto

cminatti Points 378

Cherry pick est de choisir les modifications à partir d'un "commit". La solution la plus simple est de prendre toutes les modifications de certains fichiers est d'utiliser

 git checkout source_branch <paths>...

Dans l'exemple:

$ git branch
* master
  twitter_integration
$ git checkout twitter_integration app/models/avatar.rb db/migrate/20090223104419_create_avatars.rb test/unit/models/avatar_test.rb test/functional/models/avatar_test.rb
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   app/models/avatar.rb
#   new file:   db/migrate/20090223104419_create_avatars.rb
#   new file:   test/functional/models/avatar_test.rb
#   new file:   test/unit/models/avatar_test.rb
#
$ git commit -m "'Merge' avatar code from 'twitter_integration' branch"
[master]: created 4d3e37b: "'Merge' avatar code from 'twitter_integration' branch"
4 files changed, 72 insertions(+), 0 deletions(-)
create mode 100644 app/models/avatar.rb
create mode 100644 db/migrate/20090223104419_create_avatars.rb
create mode 100644 test/functional/models/avatar_test.rb
create mode 100644 test/unit/models/avatar_test.rb

Sources et explication complète http://jasonrudolph.com/blog/2009/02/25/git-tip-how-to-merge-specific-files-from-another-branch/

Mise à JOUR:

Avec cette méthode, git ne sera pas FUSIONNER le fichier, il suffit de remplacer n'importe quel autre changement effectué sur la destination de la branche. Vous aurez besoin de fusionner manuellement les changements:

$ git diff TÊTE de nom de fichier

18voto

funroll Points 4014

Je juste choisir tout, puis faire ceci :

Je reviendrait alors les changements je ne voulez, puis créez une nouvelle validation.

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