7

これは、私の git リポジトリの最初のスナップショットです。

ここに画像の説明を入力

ブランチmasterでは、ファイルに次のm1内容が含まれます

L1

ブランチdevでは、ファイルに次のm1内容が含まれます

L1
L2

devからマージしようとするとmaster、競合が発生します。

$ git checkout master
Switched to branch 'master'

$ git merge dev
Auto-merging m1
CONFLICT (content): Merge conflict in m1
Automatic merge failed; fix conflicts and then commit the result.

$ git diff
diff --cc m1
index 078f94b,9f46047..0000000
--- a/m1
+++ b/m1
@@@ -1,1 -1,2 +1,5 @@@
  L1
++<<<<<<< HEAD
++=======
+ L2
++>>>>>>> dev

m1inの 2 行目は変更していませんがmaster、どのように競合が発生したのでしょうか?

ファイルの実際の内容を確認し、これが空白によるものかどうかを確認するには:

ブランチ上master

git branch
  dev
* master

$ xxd m1
0000000: 4c31 0a                                  L1.

ブランチ上dev

$ git checkout dev
Switched to branch 'dev'

$ xxd m1
0000000: 4c31 0a4c 320a                           L1.L2.

このリポジトリを作成するために使用したスクリプトは次のとおりです。

#!/bin/bash

mkdir git_demo
cd git_demo
git init

touch m1
git add .
git commit -m "Added file: m1"
# sleep is needed, otherwise a different repo is being created, probably because of *some* filesystem issue!
sleep 1

git branch dev
echo L1 >> m1
git add .
git commit -m "Added line L1 to m1"
# sleep is needed, otherwise a different repo is being created, probably because of *some* filesystem issue!
sleep 1

git checkout dev
echo L1 >> m1
git add .
git commit -m "Added line L1 to m1"
# sleep is needed, otherwise a different repo is being created, probably because of *some* filesystem issue!
sleep 1

echo L2 >> m1
git add .
git commit -m "Added line L2 to m1"
# sleep is needed, otherwise a different repo is being created, probably because of *some* filesystem issue!

gitg --all
git checkout master
git merge dev
4

3 に答える 3

3

答えは、2 つのブランチにコミット がないため、競合があるということです。merge-base

より少ない手順で問題を生成する方法を次に示します。
孤立ブランチの作成 (孤立ブランチとは履歴のないブランチです)

ここに画像の説明を入力

ここで、それらが同じツリーを共有していないことがわかります

[ ここに画像の説明を入力]

ここに画像の説明を入力

ここに画像の説明を入力

于 2015-12-22T13:24:02.420 に答える