Comment choisir et fusionner seulement un subpath à partir d'une branche de maître

0

La question

J'ai un problème intéressant (au moins pour moi.)

J'ai un master branche et un feature la branche, qui a été écartèrent de son chemin de master il y a un moment. Une autre équipe conserve la mise à jour de la master branche et mon équipe est seul à travailler sur feature de la branche.

L' master direction comprend certains des changements que mon équipe n'est pas intéressé. Nous ne se soucient que de leur app dossier, c'est tout. Même dans le app dossier, ne nous intéresse pas tout, seulement les changements que nous pensons que nous avons besoin. Nous ne sommes pas à la fusion de nos feature direction de dans leur master car il y a la technologie de la pile des changements que nous mettons en œuvre et la seule chose que nous avons besoin d'eux, c'est leur code JavaScript.

Pendant ce temps, nous sommes également des changements dans la feature la direction générale de app dossier. Ainsi, dans le app dossier, ils ont certains des changements que nous n'avons pas, nous avons certains des changements qu'ils n'ont pas. Nous voulons garder tous nos changements, mais seulement en prendre quelques-unes de leurs changements.

Comment puis-je aller sur la fusion de leurs master la direction générale de app dans notre dossier feature la direction générale de app dossier? J'ai cherché pendant des heures, essayé quelques VS extensions de Code pour un aperçu de la différence entre les deux dossiers. Ce que je recherche est une interface où je peux Accepter ou de Décliner tout ce qui vient de master direction générale de l'application du dossier. Bien que c'est ma préférence, je suis ouvert à toute suggestion qui permettrait de résoudre ce problème.

Cela peut paraître comme une foiré situation, mais mon équipe a perdu certains membres au cours de la dernière quelques mois et la différence entre les branches a grandi de plus en plus gros chaque semaine. Maintenant, nous voulons résoudre ce une fois pour toutes.

Merci pour votre aide.

cherry-pick git merge
2021-11-24 00:41:33
2
1

Ce que je recherche est une interface où je peux Accepter ou de refuser tout ce qui vient de la branche principale de l' app dossier

git checkout -p master app est brut, mais il est une chance décente de servir ici.

Si ce n'est pas de vous montrer assez pour décider ce que vous voulez, la prochaine étape est une fusion sélective avec

git diff --merge-base @ master -- app | git apply -3

qui va utiliser Git est automerge de machines et de laisser tout chevauchement ou attenants à des changements pour vous de faire le tri, comme d'habitude, ou vous pouvez enregistrer le diff dans un fichier et de le modifier à votre goût avant de l'appliquer si vous êtes prudent.

2021-11-24 06:42:34
1

Il y a deux façons de le faire. Le plus simple sera de conserver les modifications, mais jetez tout s'engage qu'ils ont fait. Le plus complexe sera de préserver engage.

Recommandation

Les deux méthodes décrites ci-dessous ont le potentiel de causer des conflits de fusion et autres maux de tête en bas de la ligne, surtout que les gens continuent d'apporter des modifications sur la branche master. En outre, si vous avez des modifications à l'application/ dossier dans la branche, directement à l'aide de git peut entraîner vos modifications soient remplacées.

Je vous recommande fortement de la fusion de la branche master dans la branche via git merge avec pas de les écraser. Compte tenu de la divergence que vous avez mentionné, il peut y avoir des conflits de fusion, mais c'est OK. Les conflits de fusion faire ce que vous voulez: ils vous permettent de choisir les modifications à accepter, et pour le rejeter.

Cela étant dit, voici deux approches, qui sont analogues à ceux de cherry-picking un seul dossier.

Option 1: Jeter s'engage, conserver les modifications

Cette approche est assez simple, et il utilise une combinaison de git diff et git apply:

git switch feature
git diff feature..master -- app | git apply --index

Ce sera:

  • Passer à la branche (c'est là que vous allez appliquer les modifications)
  • Obtenez toutes les modifications apportées à la branche principale, qui ne sont pas sur la branche.
  • Filtrer uniquement les changements dans la app annuaire
  • Appliquer les modifications via git apply
  • Scène les changements en les ajoutant à l'index (c'est ce que l' --index l'option n')

Le seul inconvénient de cette approche est qu'elle ne préserve pas de l'histoire, ou des messages de commit.

À partir de là, vous pouvez valider les modifications vous-même:

git commit -m "Apply changes made to master branch"

Option 2: Obtenir les deux validations et modifications

Celui-ci est un peu plus compliqué, et il s'appuie sur git format-patch.

git switch feature
git format-patch --stdout feature..master -- app | git am

Ce sera:

  • Passer à la branche (où vous allez appliquer les modifications)
  • Obtenez toutes les modifications apportées à la branche principale, qui ne sont pas sur la branche
  • Filtre uniquement les modifications effectuées dans le app annuaire
  • Le Format de ces comme une série de plaques (contenant des messages de commit, auteurs, etc)
  • Appliquer l'ensemble de ces patchs à l'aide de git am

A noter que selon le contenu de modifications, cela peut entraîner un échec que vous aurez à résoudre manuellement. (Il va vous avertir de cet)

2021-11-24 21:55:27

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................