我创建了新分支,并在一个文件中添加了几行。之后,我想将它合并到master,但git显示冲突:
<<<<<<< destination:ad27cc8d6bb445757c38541eb57ea7d3cba944b3
=======
foo
bar
>>>>>>> source:385f662b3668c9173dd757e850ceba54cfd05560
我不明白为什么会发生冲突,如果我只添加几行。那么,出了什么问题?
解决:
我摆出几条线的位置,Bitbucket没有表现出冲突。在Git Bash合并之后,我看到并解决了这个问题。
答案 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无关的分支。
我怀疑你在两个分支上以某种方式编辑了文件,可能没有意识到。