検索

ホームページ  >  に質問  >  本文

git の異なるブランチにある同じファイルが競合するとどのようにみなされるのでしょうか?

たとえば、masterdevelop という 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 にマージします。何を言いましたか?

我想大声告诉你我想大声告诉你2791日前752

全員に返信(3)返信します

  • 巴扎黑

    巴扎黑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 アドレスを送ってください #🎜🎜#

    返事
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-02 09:49:39

    自動結合があるので。ブランチを手動でマージするときに競合が発生するのを見ましたか?

    返事
    0
  • PHP中文网

    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 にマージできません。

    つまり、マスターとデベロップは元々同じ線上にありましたが、マスターを変更すると、新しいマスターは元のデベロップと同じ線上になくなります。

    返事
    0
  • キャンセル返事