【发布时间】:2015-12-22 12:45:25
【问题描述】:
这是我的 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
虽然我没有在master中修改m1的第2行,但是怎么会导致冲突呢?
验证文件的实际内容并确定这是否是由空格引起的:
在分支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.
这是我用来创建这个 repo 的脚本。
#!/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
【问题讨论】:
-
文件的最后一行可能会有一个“文件结尾”字符?
-
我不这么认为。请看我更新帖子的结尾。
-
您的流程是快进合并的完美示例,这真的很奇怪。自您创建回购以来,您能否发布确切的说明?
-
@MarounMaroun 或者,如果我上传未修改的 repo 的 ZIP,对您来说会更容易吗?我有一份原始副本用于测试目的。而且我不认为这是一个快进。相反,我希望
merge跳过重复提交(我有意引入)并应用另一个。 -
请随意发布链接到 repo 以便我查看。
标签: git git-merge git-merge-conflict