たとえば、master
と develop
という 2 つのブランチがあります。 1.txt
ファイルの場合、
master分支
:
222
3333 66
555
develop分支
:
222
4444 77
888
最初にマスターがあり、次に開発ブランチを作成し、開発ブランチの下で 1.txt を変更し、追加してコミットし、マスター ブランチに戻してからマージしました。報告された競合は 66 件と 77 件のみでした。その他 2 つの場所の間で紛争は報告されていません
66 と 77 しかない場合、なぜ競合が発生するのでしょうか?そして4444と3333、555と888は矛盾しないでしょうか?分かりません
上の図を見てください。master ブランチは 555555 です。5445 で dev に変更し、コミットを追加してから master ブランチに戻し、マージします。競合はありません。最後に 5445 にマージします。何を言いましたか?
巴扎黑2017-05-02 09:49:39
競合が発生するかどうかはコミット変更の順序によって決まります
上の階の友人は自動マージについて言及しました。これは、競合が発生しないことを意味します。例:
master 上には、コンテンツ「1234」のコミットがあります
この時点で、 develop
という名前のマスターに基づいた新しいブランチを作成します。この develop
ブランチには、次の内容: 「1234」のコミットdevelop
,那么这个 develop
branch 上面也有内容为 "1234" 的那个commit
然后你提交了新的 commit,把 "1234" 变成了 "1234 666",那这个时候你 merge
,就不会有冲突
再举个例子,会产生冲突的情况:
master
里面有一个 commit,内容是 "1234"
你在这个 commit 之后创建了新的 branch,叫 develop
。那这个时候你的 develop
branch 里有第一个 commit,内容为 "1234"
然后你在 develop
里面,提交了一个 commit,内容是 "1234 777"
在这期间,你的 master
更新了,你的同事或者朋友,或者你自己,在 master
その後、新しいコミットを送信して「1234」を「1234 666」に変更します。この時点で merge
を実行すると、競合は発生しません
競合が発生する別の例を見てみましょう:
master
そこにはコミットがあり、内容は「1234」です
このコミットの後に
、 という新しいブランチを作成しました
を開発します。この時点で、develop
ブランチに最初のコミットがあり、その内容は "1234"#🎜🎜#
#🎜🎜# 次に、develop
でコミットを送信しました。コンテンツは「1234 777」です #🎜🎜##🎜🎜# この期間中に、master
が更新され、同僚、友人、またはあなた自身が、master
で新しいコミットを送信し、それを「1234 666」に更新しました#🎜🎜##🎜🎜#
#🎜🎜#この時点で再度マージすると、競合が発生します。これは、git は 2 つのブランチに共通の祖先 (先祖) (「1234」) があることを検出しますが、git は現在何をマージしているのかを認識していないためです。 「666」と「777」どっちがいいですか #🎜🎜#
#🎜🎜#
#🎜🎜#質問に戻りますが、まず 2 つのブランチのコミット履歴を調べて比較することをお勧めします。このような状況が見つかるかどうかを確認してください。つまり、2 つのブランチには開始点 (先祖) として共通のコミットがありますが、後続のコミットには分岐 (部分) があります #🎜🎜#
#🎜🎜# それでも問題を説明できない場合は、ご都合がよければ、github アドレスを送ってください #🎜🎜#PHP中文网2017-05-02 09:49:39
試してみましたが、うまくいかないことがわかりました。これが元の答えです。
すべて私の推測です。
最初のマスターは次のようになります:リーリー
次に、開発をフォークして次のように変更します。リーリー
現時点では、develop はマスターの後にマスターを変更するものであるため、競合することなくマスターと直接マージできます。しかし、マージ開発ではなく、マスターを変更しました:
リーリー
現時点では、66と77の間に対立があります。 git は、開発中の 4444 が 3333 から変更され、888 が 555 から変更されたことを認識しているため、現在のマスター位置は 3333 と 555 のままです。しかし、77 は元々 22 から変更されましたが、マスターの 22 は 66 になりました。 2 つの競合する変更があるため、git は 77 を 66 にマージできません。つまり、マスターとデベロップは元々同じ線上にありましたが、マスターを変更すると、新しいマスターは元のデベロップと同じ線上になくなります。