Je sais qu'il existe beaucoup d'informations sur l'annulation d'une fusion dans git, mais je n'arrive pas à trouver de consensus sur la façon de procéder dans ma situation spécifique. Quelqu'un a essentiellement fusionné notre branche develop
dans notre branche master
via une requête d'extraction dans bitbucket. Cela vient de se produire aujourd'hui, c'est donc la dernière chose qui a été faite sur la branche master (nous n'avons pas à nous inquiéter des autres commits en plus de la commit de fusion).Annuler une fusion git créée par une requête d'extraction bitbucket
Note: Nous hébergeons nous Bitbucket, nous avons donc une ancienne version de bitbucket. Il n'y a pas d'option de demande d'extraction de retour.
D'après ce que j'ai lu, il y a essentiellement deux façons de gérer cela dans git:
git reset --hard *<SHA of commit before the merge>*
- Cela supprimera la fusion engage comme si elle n'a jamais eu lieu. Partout j'ai lu que "c'est une mauvaise pratique de réécrire l'histoire" ou "ne jamais le faire sur un repo partagé publiquement" mais ils n'expliquent jamais vraiment pourquoi ne pas le faire. Il semble que cela va résoudre le problème, et cela ne deviendra pas un problème dans 6 mois, quand nous voulons vraiment refaire cette fusion de
develop
àmaster
- Si c'est la meilleure façon de le faire, et nous le faisons il, ce qui se passe à la demande de traction dans bitbucket? Cette requête pull existe toujours dans bitbucket, mais nous supprimons le commit de fusion créé, de sorte que cela va gâcher bitbucket de quelque façon que ce soit?
- Cela supprimera la fusion engage comme si elle n'a jamais eu lieu. Partout j'ai lu que "c'est une mauvaise pratique de réécrire l'histoire" ou "ne jamais le faire sur un repo partagé publiquement" mais ils n'expliquent jamais vraiment pourquoi ne pas le faire. Il semble que cela va résoudre le problème, et cela ne deviendra pas un problème dans 6 mois, quand nous voulons vraiment refaire cette fusion de
git revert -m 1 *<SHA of the merge commit>*
- Cela va créer un nouveau commit qui supprime les changements qui ont été faites par la fusion
- Ce serait bien, sauf que nous avons l'intention de fusionner
develop
dansmaster
à une date ultérieure date (la prochaine version), et d'après ce que j'ai lu, nous devrons nous rappeler de revenir à notre inversion avant de faire cela, car sinon nous fusionneronsdevelop
enmaster
, les changements que nous inversons aujourd'hui ne seront pas inclus. Je ne veux vraiment pas que cela devienne un problème dans 6 mois, quand personne ne se souvient de cela.
TL; DR: Je hésite à faire git revert
en raison des problèmes qu'elle pourrait causer 6 mois à partir de maintenant, lorsque nous voulons faire cette fusion à nouveau. Je suis également hésitant à faire git reset
parce que tout le monde semble mettre en garde contre le faire, et il pourrait causer des problèmes avec la demande de traction sur bitbucket.
Pouvez-vous élaborer sur le numéro 2? Je ne suis pas. Surtout avec votre utilisation de "forward". Êtes-vous en train de dire qu'il y a un moyen de changer 'develop' de sorte qu'il prendra en compte le retour quand nous faisons la fusion de' develop' à 'master' dans 6 mois? –
exemple ajouté avec des graphiques – max630
Wow merci pour la réponse détaillée. Je vais certainement marquer cela comme la réponse acceptée, mais encore une chose. Nous ne pouvons pas faire une fusion rapide de maître à développement car il y a eu d'autres commits sur le développement depuis que nous avons fait le retour en master. Cela change-t-il quelque chose? Puis-je encore accomplir cela en faisant un commit de fusion sur develop au lieu d'une fusion fast-forward? –