J'ai 2 branches git branch1 et branch2 et je veux fusionner file.py dans branch2 dans file.py dans branch1 et uniquement ce fichier.
En substance, je veux juste travailler sur le file.py dans branch1 mais je veux profiter de la commande de fusion. Quelle est la meilleure façon de procéder?
Réponses:
Lorsque le contenu provient
file.py
de branch2 qui ne s'applique plus à branch1 , il faut sélectionner certaines modifications et en laisser d'autres. Pour un contrôle total, effectuez une fusion interactive à l'aide du--patch
commutateur:La section du mode interactif de la page de manuel pour
git-add(1)
explique les touches à utiliser:La commande Split est particulièrement utile.
la source
git init <dir>
) et finalement de le jeter (rm -r <dir>
).Bien qu'il ne s'agisse pas d'une fusion en soi, le contenu entier d'un autre fichier sur une autre branche est parfois nécessaire. Le billet de blog de Jason Rudolph fournit un moyen simple de copier des fichiers d'une branche à une autre. Appliquez la technique comme suit:
Maintenant
file.py
est maintenant dans branch1 .la source
file.py
ce qui se trouve dans la branche 2.Aucune des autres réponses actuelles ne «fusionnera» réellement les fichiers, comme si vous utilisiez la commande de fusion. (Au mieux, ils vous demanderont de choisir manuellement les différences.) Si vous voulez réellement profiter de la fusion en utilisant les informations d'un ancêtre commun, vous pouvez suivre une procédure basée sur celle trouvée dans la section "Fusion avancée" du git Manuel de référence.
Pour ce protocole, je suppose que vous souhaitez fusionner le fichier 'chemin / vers / fichier.txt' de l'origine / maître dans HEAD - modifiez-le si nécessaire. (Vous n'avez pas besoin d'être dans le répertoire supérieur de votre référentiel, mais cela aide.)
git merge-file devrait utiliser tous vos paramètres de fusion par défaut pour le formatage et autres.
Notez également que si votre "nôtre" est la version de la copie de travail et que vous ne voulez pas être trop prudent, vous pouvez agir directement sur le fichier:
la source
Toutes les modifications apportées à
file.py
inbranch2
dans leurs propres commits sont-elles distinctes des modifications apportées aux autres fichiers? Si tel est le cas, vous pouvez simplement effectuercherry-pick
les changements:Sinon,
merge
ne fonctionne pas sur des chemins individuels ... vous pouvez tout aussi bien créer ungit diff
patch defile.py
modifications depuisbranch2
etgit apply
versbranch1
:la source
Vous pouvez
stash
etstash pop
le fichier:la source
Pour ne fusionner que les modifications de branch2, supprimez
file.py
les autres modifications.Merge ne regardera même jamais aucun autre fichier. Vous devrez peut-être «-f» les extractions si les arbres sont suffisamment différents.
Notez que cela laissera à branch1 l'impression que tout dans l'historique de branch2 a été fusionné jusqu'à ce point, ce qui peut ne pas être ce que vous voulez. Une meilleure version de la première vérification ci-dessus est probablement
dans ce cas, le message de validation devrait probablement également être
la source
Je suis dans la même situation, je souhaite fusionner un fichier d'une branche qui contient de nombreux commits sur 2 branches. J'ai essayé de nombreuses façons ci-dessus et d'autres que j'ai trouvées sur Internet et toutes ont échoué (parce que l'historique des validations est complexe), alors je décide de faire mon chemin (de manière folle).
la source
Ce que j'ai fait est un peu manuel, mais je:
revert
;HEAD~1
, c'est-à-dire leur état dans le commit de fusion;Laid? Oui. Facile à retenir? Oui aussi.
la source