Comment puis-je sans douleur fusion divergentes en fonction des branches?

0

La question

J'ai un ouvert de RP sur une branche appelée feature-b qui sera bientôt fusionné pour main. Cependant, je l'ai écrit à l'appui de ma feature-a branche, qui est en cours. Je veux continuer à travailler sur feature-a et de maximiser le travail que j'ai fait dans feature-b avant il a été fusionné à main.

Quelle est la meilleure façon pour moi de faire cela? Notre fusionne à main sont éliminés, de sorte que tous les commits sur feature-b va être réécrit comme un seul commit quand il est fusionné à main. Par conséquent, la relocalisation feature-a sur feature-b aujourd'hui entraînera dans les conflits de l'avenir de la douleur quand j'ai fusion feature-a pour main parce que les mêmes modifications ont été faites dans les différents commits.

Quelle est la meilleure façon pour moi d'inclure les modifications apportées dans feature-b dans mon feature-a de la branche, tout en minimisant l'avenir de la douleur quand je l'ai finalement fusionner feature-a pour main?

Mise à JOUR

Je suis allé de l'avant et de:

  1. Relocalisée feature-a sur feature-b
  2. Fait plus de changements (1 seul commit) à feature-a tandis que feature-b est en cours de révision
  3. Squash-fusionné feature-b une fois qu'il a été approuvé (pas de modification nécessaire, de manière à feature-a a déjà le code exact qui a été fusionné)
  4. Tiré à plus tard main et relocalisée feature-a sur le dessus de cela

Comme on le craignait, git se plaint que plusieurs dossiers sont "à la fois modifié" ou "deux". Ce serait un peu ennuyeux, mais simple à corriger. Ce qui le rend incroyablement déroutant, surtout si aucun passage de temps a passé - est de la fusion des commentaires dans les fichiers.

Même si les deux main et feature-a les branches ont la même code exactement, dans tous les fichiers, j'obtiens super gênant comportement:

  1. Pour la "deux" de fichiers, de fusionner les commentaires sont ajoutés "à la TÊTE (Modification en cours)" et "parent de #HASH (message de commit)". Je suis obligé de choisir l'un ou l'autre, même si elles sont exactement les mêmes!
  2. Pour le "tous deux modifiés" les fichiers, c'est encore pire. La "TÊTE (Modification en cours)" montre le code est correct. Cependant, la "mère de #HASH (message de commit)" montre la moitié du code. Encore une fois, même si les deux branches ont tout le code!! Je ne plaisante pas, en acceptant les "entrants dans le changement" (comme indiqué sur l'étiquette par VS Code) va supprimer le code qui est dans les deux branches!

Si je n'avais pas fait ces changements, en succession rapide, je serais irrémédiablement perdus et confus au sujet de ce que git est en me montrant. Qui a d'ailleurs arrivé à plusieurs reprises dans le passé, mais je n'arrivais pas à mettre le doigt sur ce qui n'allait pas. Maintenant que j'ai reproduit ce et vérifié le comportement, je suis complètement déconcerté car à ce que git est en train de faire et la façon dont les gens traitent avec ce scénario.

Mise à JOUR 2

OK, j'ai un peu de voir pourquoi il allait supprimer le code maintenant. C'est parce que les changements que j'ai faits dans feature-b ont été dans plusieurs commits, et ceux qui s'engage a fini par être écrasé lors de la fusion de main eu lieu. C'est sans doute la source de la douleur et pourquoi je suis à essayer de comprendre un flux de travail plus sain.

git
2021-11-23 23:26:24
1

La meilleure réponse

0

Je ne suis pas convaincu de la finale de fusion/squash sera en désordre. Si la même modification est faite dans les différents commits, peut-être Git peut détecter et d'être heureux avec elle.

Si vous ne pense qu'il sera en désordre bien, ce que vous pourriez faire est de:

  1. Rebase votre feature-a branche avec feature-b maintenant, de sorte que votre feature-a branche comprend maintenant le formulaire de fonction B et le progrès fonction de A, qui est ce que vous avez besoin pour faire votre travail.
  2. Après feature-b fusionnés dans le main branche, rebase feature-a sur le commettre immédiatement avant l'écrasé engageons à ce qu'ils ont fait pour la fonctionnalité de B. Cela devrait bien se passer.
  3. Sur votre feature-a de la succursale, de l'utilisation git reset --soft XX est la validation de hachage pour l'écrasé de commettre ils ont fait pour la fonctionnalité de B. Ensuite utiliser git commit pour faire un commit. Maintenant, vous avez un écrasé de commettre dont le contenu est égal à l'état actuel de votre travail sur la caractéristique A. Mais ce commit parent est le commit que l'ajout de la fonction B à la branche principale, de sorte à ce commit la diff avec ce parent sera uniquement contenir fonction de A. Il est bien de continuer à travailler sur la fonctionnalité de Un à ce point, ou tout simplement demander une fusion.

En passant, je suis assez confiant les choses n'auraient pas besoin d'être à ce désordre si votre organisme a utilisé fusionne au lieu de rebases à ajouter des choses à la branche principale. Et puis il y aurait l'avantage de préserver l'histoire même du code sur lequel vous travaillez, au lieu de simplement la préservation de cet artificielle de l'histoire.

2021-11-23 23:52:54

Pour être clair, nous n'utilisons pas de rebases - nous utiliser écrasé s'engage. Et je suis sûr à 99% que les choses vont être bordélique que j'ai essayé dans le passé. Git devient horriblement confus par distinctes s'engage à faire le même changement. Je suis prêt à essayer de nouveau, bien que le rapport de retour :)
me--

@moi-- je suis assez sûr écrasé s'engage est un rebase
evolutionxbox

La relocalisation des moyens de déplacer la branche, donc il commence à un point différent, ce qui réécrit l'histoire de comment il a été développé. L'écrasement de changer l'ensemble de la branche en un seul commit, en supprimant l'histoire de comment il a été développé, sauf pour le résultat final.
David Grayson

@DavidGrayson Veuillez voir ma mise à jour de question pour une explication du comportement je vois de git.
me--

OK. Votre étape 4 ("Tiré dernières principal et relocalisée fonctionnalité-un sur le dessus de celui-ci") est ce qui vous a causé de la douleur il n'est donc pas quelque chose que je ne recommande pas de faire. Au lieu de faire ce que l'étape 4 de votre question, essayez les étapes 2 et 3 de ma réponse.
David Grayson

Merci @DavidGrayson. Il semble donc . . . laborieux
me--

Comme je l'ai dit dans ma réponse, le problème est causé par la personne ayant fait tout cela de la lecture et de l'écraser au lieu de simplement la fusion.
David Grayson

Dans d'autres langues

Cette page est dans d'autres langues

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