たとえば、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 にマージします。何を言いましたか?
競合が発生するかどうかはコミット変更の順序によって決まります
上の階の友人は自動マージについて言及しました。これは、競合が発生しないことを意味します。例:
master 上には、コンテンツ「1234」のコミットがあります
この時點で、 develop
という名前のマスターに基づいた新しいブランチを作成します。この develop
ブランチには、次の內(nèi)容: 「1234」のコミットdevelop
,那么這個 develop
branch 上面也有內(nèi)容為 "1234" 的那個commit
然后你提交了新的 commit,把 "1234" 變成了 "1234 666",那這個時候你 merge
,就不會有沖突
再舉個例子,會產(chǎn)生沖突的情況:
master
里面有一個 commit,內(nèi)容是 "1234"
你在這個 commit 之后創(chuàng)建了新的 branch,叫 develop
。那這個時候你的 develop
branch 里有第一個 commit,內(nèi)容為 "1234"
然后你在 develop
里面,提交了一個 commit,內(nèi)容是 "1234 777"
在這期間,你的 master
更新了,你的同事或者朋友,或者你自己,在 master
その後、新しいコミットを送信して「1234」を「1234 666」に変更します。この時點で merge
を?qū)g行すると、競合は発生しません
競合が発生する別の例を見てみましょう:
master
そこにはコミットがあり、內(nèi)容は「1234」です
このコミットの後に
、 という新しいブランチを作成しました
を開発します。この時點で、develop
ブランチに最初のコミットがあり、その內(nèi)容は "1234"#????#
#????# 次に、develop
でコミットを送信しました。コンテンツは「1234 777」です #????##????# この期間中に、master
が更新され、同僚、友人、またはあなた自身が、master
で新しいコミットを送信し、それを「1234 666」に更新しました#????##????#
#????#この時點で再度マージすると、競合が発生します。これは、git は 2 つのブランチに共通の祖先 (先祖) (「1234」) があることを検出しますが、git は現(xiàn)在何をマージしているのかを認識していないためです。 「666」と「777」どっちがいいですか #????#
#????#
#????#質(zhì)問に戻りますが、まず 2 つのブランチのコミット履歴を調(diào)べて比較することをお勧めします。このような狀況が見つかるかどうかを確認してください。つまり、2 つのブランチには開始點 (先祖) として共通のコミットがありますが、後続のコミットには分岐 (部分) があります #????#
#????# それでも問題を説明できない場合は、ご都合がよければ、github アドレスを送ってください #????#試してみましたが、うまくいかないことがわかりました。これが元の答えです。
すべて私の推測です。
最初のマスターは次のようになります:リーリー
次に、開発をフォークして次のように変更します。リーリー
現(xiàn)時點では、develop はマスターの後にマスターを変更するものであるため、競合することなくマスターと直接マージできます。しかし、マージ開発ではなく、マスターを変更しました:
リーリー
現(xiàn)時點では、66と77の間に対立があります。 git は、開発中の 4444 が 3333 から変更され、888 が 555 から変更されたことを認識しているため、現(xiàn)在のマスター位置は 3333 と 555 のままです。しかし、77 は元々 22 から変更されましたが、マスターの 22 は 66 になりました。 2 つの競合する変更があるため、git は 77 を 66 にマージできません。つまり、マスターとデベロップは元々同じ線上にありましたが、マスターを変更すると、新しいマスターは元のデベロップと同じ線上になくなります。