2015-11-06 92 views
1

当我想要检索的一个分支与主的变化:混帐拉--rebase:自动合并冲突文件

git pull --rebase 

和修饰对主已经完成对我在修改的文件我分支,自动合并在这个文件上完成。 生成的文件是主修改和分支修改的混合。

为什么我没有一个带有冲突标记区域的文件?

编辑 这是我遇到的问题描述,这是我的问题的由来。 在分支B上,我有一个实现接口IC的C类。我在本地为C添加了一个方法。同一分支上的另一个人推送了一些修改。其中一个修改是:向IC添加一个方法并向C添加一个方法实现。这个方法是我之前添加在我身边的方法。 拉出之后,Git自动合并了文件C和2个方法,并在类C中存在相同的签名。 这就是为什么我想禁止自动合并的原因。

+1

http://stackoverflow.com/questions/5074452/git-how-to-force-merge-conflict-and-manual-merge-on-selected-file –

回答

0

没有得到这样的文件的原因是因为没有冲突。如果没有冲突,一切都可以干净地合并。如果发生了一些冲突,git会提醒你,然后让你启动一个合并工具或让你修改冲突线manualy

编辑 如果你想git的强制通知你它合并的文件(即到强制冲突),您应该制作一个自定义合并驱动程序,请参阅Git - how to force merge conflict and manual merge on selected file

编辑 至于你的话: 在“拉分支”,有两个变化WRT主:

  1. 在行X
  2. 的代码添加一个代码块删除块在行Y.

预期的行为是,如果X行的代码块在master中保持不变,合并两个更改后发生:remo ve在X代码块并添加代码块在Y.

这正是git所做的!如果你将这样一个分支合并到master中,之后该方法只会在文件中出现一次,即在你将它移动到的地方

它可能出错的地方:如果你有两个分支:A和B.您将方法移动到Y1行,在B中您将同一方法移动到行Y2。 Git认为:两个分支共享“删除”,这里没有冲突。除了加法之外没有冲突(因为Y1和Y2相距很远)...

但是,您描述的用例(方法仅在一个分支中移动)不会产生任何问题。

+0

我不明白为什么没有冲突。在我的情况下,2人改变了相同的文件,所以只有我可以实现合并。自动合并在这里没有意义。 – Ekans

+0

如果它们在此文件中更改不同的行,则可能不会有冲突。例如,如果我将文件的第一行更改为“a”,并将该文件的最后一行更改为“b”,则自动合并将采用原始文件,并将第一行和最后一行更改为“a”,分别为“b” – BartBog

+0

好吧我理解冲突是否在行级管理。那么我可以在文件级别拥有“冲突管理员”吗?更一般地说,我如何在我的用例中发生冲突? – Ekans