Git:奇怪的是没有任何冲突

时间:2014-08-13 07:11:16

标签: git merge conflict

我创建了新分支,并在一个文件中添加了几行。之后,我想将它合并到master,但git显示冲突:

<<<<<<< destination:ad27cc8d6bb445757c38541eb57ea7d3cba944b3
=======
foo
bar
>>>>>>> source:385f662b3668c9173dd757e850ceba54cfd05560

我不明白为什么会发生冲突,如果我只添加几行。那么,出了什么问题?

解决:

我摆出几条线的位置,Bitbucket没有表现出冲突。在Git Bash合并之后,我看到并解决了这个问题。

2 个答案:

答案 0 :(得分:6)

我可以按照以下方式重现您的冲突:

$ git init
$ echo a >test
$ git add test
$ git commit -m msg
[master (root-commit) eac86cc] msg
 1 file changed, 1 insertion(+)
 create mode 100644 test
$ git checkout -b source
Switched to a new branch 'source'
$ printf 'foo\nbar\n' >test
$ git commit -am source
[source 9f22aa2] source
 1 file changed, 2 insertions(+), 1 deletion(-)
$ git checkout master
Switched to branch 'master'
$ >test
$ git commit -am destination
[master 45e3e19] destination
 1 file changed, 1 deletion(-)
$ git -c merge.conflictstyle=merge merge source
Auto-merging test
CONFLICT (content): Merge conflict in test
Automatic merge failed; fix conflicts and then commit the result.
$ cat test
<<<<<<< HEAD
=======
foo
bar
>>>>>>> source

发生的情况是,一个分支已将a更改为foo / bar,另一个分支已删除a。从简单的合并样式冲突标记中分辨出来是不可能的,但是如果你使用merge.conflictstyle=diff3,那么你会看到类似下面输出的内容,这就说明了冲突的原因。

显然,您的冲突在细节上可能会有所不同。

<<<<<<< HEAD
||||||| merged common ancestors
a
=======
foo
bar
>>>>>>> source

答案 1 :(得分:0)

冲突似乎表明,在一个实例中,该行专门为空,但在另一个实例中,您添加了两行。发生了一些事情,因此从一个提交到另一个提交并不容易。

如果不浏览你的git log,就很难确切地说出这场冲突是怎么发生的。为了帮助您了解事情的分歧,您可以尝试以下两个命令之一:

git log --graph --oneline --decorate

git log --all

区别在于第二个将显示提交,第二个将显示与当前HEAD无关的分支。

我怀疑你在两个分支上以某种方式编辑了文件,可能没有意识到。