GOOGLE ADS

mardi 19 avril 2022

Fusionner Git ? - ignorer complètement les changements d'une branche

J'ai eu une situation classique - maître et plusieurs branches. J'ai besoin de fusionner les modifications (de nombreuses modifications via plusieurs validations) dans master, mais je souhaite ignorer toutes les modifications apportées à master lui-même. Je veux que master soit un clone de ma branche.

Je sais que je pourrais simplement extraire chaque fichier de la branche au maître et valider les modifications, mais cela ne rendra pas le graphique joli:)

Comment puis-je y parvenir? Résoudre les conflits de fusion n'est pas suffisant, car il y a encore des changements qui ont été fusionnés automatiquement. Dois-je les supprimer manuellement ou y a-t-il une git merge --magicoption qui pourrait m'aider?

AJOUT :
J'aimerais que les fichiers soient une copie exacte entre la branche et le maître (pas l'historique des validations), mais j'aimerais que tout cela soit réduit à une seule validation.


Solution du problème

La réponse dépend si vous vous souciez de préserver l'historique de la branche master. Si vous utilisez un git reset --hard, vous perdrez l'historique du maître qui a divergé des branches de fonctionnalité.

Si vous souhaitez conserver l'historique, une meilleure astuce serait de le faire en deux fusions, la première fusion utilisant la -s oursstratégie de fusion.

git checkout feature
git merge -s ours master
git checkout master
git merge --ff-only feature

La première fusion git merge -s ours mastercréera un commit de fusion vide sur feature. Le code sera une copie exacte de ce qui est sur feature.

La deuxième fusion fera avancer rapidement le maître vers le commit de fusion vide. Le résultat final sera deux branches avec exactement le même code et des historiques préservés. Le code sera une copie exacte de ce qui était présent avant les deux fusions.

Autant que je sache, il n'y a pas une seule option/commande pour effectuer cette opération. -Xtheirsn'est pas vraiment une stratégie de fusion, c'est juste une option pour la stratégie de fusion par défaut qui lui indique comment résoudre les conflits.

git merge -s oursexiste spécifiquement pour l'opération de fusion de l'historique des branches obsolètes et de rejet des modifications. Il n'y a pas de -s theirsstratégie.

L'astuce ici est que vous voulez jeter les modifications sur master, mais conserver la branche par la suite. Normalement, vous supprimeriez simplement la branche obsolète après avoir effectué une -s oursfusion.

Aucun commentaire:

Enregistrer un commentaire

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique ?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...