为什么git认为这是一个樱桃挑战后的冲突?

时间:2015-09-30 04:45:17

标签: git conflict tortoisegit

我在Windows上使用TortoiseGit,我有2个分支。但是,当我从另一个分支机构提交承诺时,我常常会收到“confilict”报告。但是当我试图解决这些“冲突”时,我很多时候都很困惑和愤怒(就像下面屏幕截图中的情况一样),这怎么会发生冲突呢?一个文件没有任何东西,而另一个文件有一些新行,这可能不是更简单。为什么git将此视为冲突?谁能解释一下?感谢..

why this was marked 'conflict' by git?

2 个答案:

答案 0 :(得分:1)

我已经复制了一个案例,其中显然没有明显的冲突背后存在真正的冲突。

基础提交:

foo
bar
baz

master上的下一次提交会删除baz

foo
baz

另一个分支上的下一次提交会在同一位置添加一些东西

foo
spam
bar
baz

当我尝试将分支合并为master时,我发现了这个冲突:

foo         
<<<<<<< HEAD
=======     
spam        
bar         
>>>>>>> plus
baz         

显然是一个误报,主人没什么,在另一个分支上添加了一些内容。

但实际上,警报并非虚假,但是Git放入文件的信息肯定是错误的:它列出了bar,在master上删除,在另一个分支上添加。

所以Git是马车,但是以一种非常微妙和令人惊讶的方式。他们显然试图将一些信息放入>>>>>>>=======<<<<<<<符号中,但删除 - 添加冲突不适合它,因为它需要有关合并库的其他信息。或任何其他方式告诉“由他们保留”由他们“保留”。

答案 1 :(得分:0)

当您从另一个分支中挑选提交时,您正在该分支上进行提交。与任何提交一样,存在合并冲突的可能性。

我认为您混淆的原因是您正在挑选的提交已经位于另一个分支中,并且您已经解决了此提交的所有合并冲突。因此直观地看起来这个提交应该可以移植到另一个分支而没有任何问题。问题是,当您将此提交选择到另一个分支时,该提交所在的 base 已更改。因此,您可以(并且经常会)获得合并冲突。