2017-10-08 17 views
0

私は、ファイルDemo.txtがあるマスターブランチを持っています。

AAAAAA
BBBBBB

のDevがこの時点でマスターから分岐された新しいブランチ:それは、次の2行を持っています。マージ時に解決され、リモートにプッシュされたマージの競合があったgitマージを元に戻します。

:同じ2行は
BBBBBB

は私がマスターをチェックアウトと仮定して、ファイルになるようにDemo.txtに新しい行を追加できます

AAAAAA、すなわちと枝のDevは今Demo.txtが含まれています

AAAAAA
BBBBBB
XXXXXX

同様に、私はその後のDevをチェックアウトし、追加しますDemo.txtへの新しい行のファイルになるように:

AAAAAA
BBBBBB
YYYYYY

は今、私はマスターをチェックアウトし、それにDevのマージ。 3行目のDemo.txtファイルにマージの競合があります。マスターとDevブランチの両方のエントリを保持することによって競合が解決されたとします。新しいマージされたファイルがどのように見えると仮定しましょう:

AAAAAA
BBBBBB
XXXXXX
YYYYYY

今私は、マージをコミットし、リモートリポジトリにプッシュ。マージのコミットIDがabcdef056fgのようなものだとしましょう(例のみ)。マージを押した後、私はマージ競合を解決する際に何らかのエラーが発生していることを発見し、マージをロールバックしたい。また、エラー修復の一環としてDevにもう一度変更を加え、再度マスタにマージする。 Linus Torvaldsのこのリンクの指針( "https://raw.githubusercontent.com/git/git/master/Documentation/howto/revert-a-faulty-merge.txt")によれば、私はabcdef056fgのマージの復帰を元に戻します。例えば、 私はチェックアウトマスターですが、私に新しいコミットを与える "revert -m 1 abcdef056fg"を実行してください。復帰の復帰を得るためにコミットを再び復帰します。元に戻すマージの復帰は私に次のようDemo.txtを与える:私は、その後のDevをチェックアウトし、次の行でそれに新しいファイルDemo2.txtを追加

AAAAAA
BBBBBB
XXXXXX
YYYYYY

;

PPPPPP

I今チェックアウトマスターして、再度のDevをマージします。新しいファイルDemo2.txtがマスターに正しくマージされます。しかし、私はDemo.txtのマージ競合をもう一度解決するオプションは与えられていません。デモで再びマージ競合が表示されたかったとします。TXTは、私は次のように変更することができるように:YYYYYY
XXXXXX

AAAAAA
BBBBBB
YYYYYY
XXXXXX

代わり

のAAAAAA
BBBBBB

どうすればいいですか?私はマスターブランチをきれいに保ち、それについては何も開発しないので、マスターに直接変更したくありません。すべての開発はDevブランチで行われ、最終的にテストされ、マスターにマージされます。またこれは、単一の競合を伴う人為的な例です。このようなマージには解決されコミットされたいくつかの競合があり、マスター内のすべてのマージを修正したくありません。それで私はどうしますか?

+1

[Gitでマージの競合を解決するにはどうすればいいですか?](https://stackoverflow.com/questions/161813/how-to-resolve-merge-conflicts-in-git) – kRiZ

答えて

0

私はこの質問に対する答えを見つけました。答えは、上記のマージが実行された明らかな誤りがあるという事実にあります。私の意図は、マスターブランチを開発なしで常に清潔に保つことでした。最初のマージの前に3行目のXXXXXXをMasterのDemo.txtに追加しました。これは矛盾です。

AAAAAA
を:今すぐXXXXXXを追加しました、私は戻って前をmaster.DoingへのDevをマージする前のDevに最初にマージされたマスターは、次のように要件ごとに解決されていたであろうDemo.txtでマージの競合を与えているだろうしている必要がありますBBBBBB
XXXXXX
私はそれはまっすぐ進むと、残りのマスターにDemo.txtと合併されているだろうマスターにマージされた場合

YYYYYY:

AAAAAA
今、マスターに復帰を元に戻すBBBBBB
XXXXXX
YYYYYY

は上記と同じDemo.txtを保持しているでしょう。 今、次のように私はバグ修正のためのDev(離れてDemo2.txtを追加することから)と固定Demo.txtをチェックアウトした場合:

AAAAAA
BBBBBB
YYYYYY
XXXXXX

とマスターをチェックアウト

AAAAAA
BBBBBB:再びとマスターへのDevを合併し、Gitはマージの競合を与えることなく、次の4つのラインでマスターにDemo.txtを修正します YYYYYY
XXXXXX

これが私たちの目的を解決します。

これはいくつかの有用な分析かもしれないので、質問を削除しないでください。

関連する問題