2

ブランチのバグを見つけた場合に備えて、git でブランチのマージを元に戻す方法を説明する複数のリソースがあります。このようなマージに続くステップは、ブランチが上流にプッシュされていない場合は、ブランチ/マージでリセット/エラーを修正するか、ブランチでエラーを元に戻す/修正/元に戻す/マージを元に戻します。ただし、これは分岐コードにエラーがあった場合にのみ関係します。今日、マージコミットで競合が解決された方法のために無効だったマージを元に戻そうとしました。

以前の状況:

master o -- 1 -- C
        \      /
branch   a -- b

ブランチを master にマージした開発者は、コミット 1 で他の誰かによって実装されたコードに関連するコミットに遭遇しました。競合を解決してコミットし、マージ コミット "c" を作成しました。問題は、その作業中にバグが発生したことです。私がやりたかったのは、このマージを元に戻し、適切に再マージして、次のようなものを作成することでした:

master o -- 1 -- C -- ~C -- C1
        \      /          /
branch   a -- b ----------

ここで、"~C" は元に戻された "C" であり、"C1" は正しいマージです。残念ながら、私にはこれができないようです。

もちろん、1 にリセットして「ブランチ」を「マスター」に再マージすることはできますが、変更はすでに上流にあり、私は汚いトリックをしたくありませんでした。

スレッドで見つけた解決策まだプッシュされていない Git マージを元に戻すことはできませんでした。

私が得た最もクリーンなアイデアは、「C」で壊れたコードを修正して「マスター」にコミットすることでしたが、この場合、競合するファイルのリストや競合する行の強調表示など、git からの助けは得られません。とても役に立ちました。

何か案は?

4

1 に答える 1

2

作成しようとしているグラフは、git の観点からは意味がありません。具体的には、C1 を ~C と b のマージにするのは奇妙です。マージ ベースが b であるため、何もする必要がありません。

早送りプッシュを実行できない、または実行しない場合、最適なオプションはマージを再作成し、~C が現在立っている場所にコミット C1 を作成することです。それを「失敗した競合解決を修正する」と呼び、それで完了です-追加のマージの混乱は必要ありません。

このようなコミットを作成するには、まず正しくマージされたコミット C1 を作成してから、次のように実行します。

git reset --hard $(git commit-tree -p C -m "fix botched conflict resolutions" C1:)

その行の説明については、この回答を参照してください。

于 2012-11-02T16:15:07.027 に答える