Git に修正できない問題があります。同様のケースを検索しましたが、自分の状況に適した解決策を見つけることができませんでした。
基本的に、master と bugfix の 2 つのブランチがあります。バグ修正は、リリースを行った時点で master から派生します。バグ修正で何かを修正し、バグ修正リリースを行うたびに、それをマスターにマージする必要があります。Master には新しい機能が含まれています (もちろん、バグ修正にマージすることはできません)。誰かが誤って master をバグフィックスとマージしてしまったことがありました。
This is what happened:
master: x1---x2
\
bugfix: y1--y2--M
where M is the merge between bugfix and master
これに対する解決策は、ここで説明されているように、「git revert -m 1 M」(M はマージからの SHA) で行ったマージを元に戻すことでした。バグ修正ブランチには、失いたくない他の変更が既にあり、これはバグ修正ブランチでうまく機能したため、元に戻しました。
Current state:
master: x1--x2------------x---x
bugfix: y1--x1--y2--x2--M--y--y--R1
where R1 is the revert of M
この問題は、バグ修正ブランチを master にマージする必要があるときに発生します。私が投稿したリンクで説明されているように、元に戻すとコードの変更は修正されますが、履歴は修正されません。これは、マスターにバグ修正をマージすると、元に戻すが有効になり、マスター (x1 と x2) から変更が削除されることを意味します。私にできることは、マスターにマージする前に、バグ修正で元に戻すことです。
Solution:
master: x1--x2------------x---x--------M
/
bugfix: y1--x1--y2--x2--M--y--y--R1--R2
where R2 is the revert of R1
これは機能しますが、マージを行うたびにこの「元に戻す」を行う必要があるため、最終的な解決策ではありません。数日間、これに対する恒久的な解決策を探していましたが、バグ修正ブランチの履歴からマスター コミット (x1 と x2) を消去するしかないようです。ただし、ここでは例として x1 と x2 を使用しています。実際にはもっと多くのコミットがあり、バグ修正ブランチの履歴を分析することは非常に難しく、エラーが発生しやすくなっています。Git がこれを行うのに役立つことは確かですが、方法がわかりません。
どんなアイデアでも非常に役に立ちます。