我从远程分支中拉出,其中有一个包含以下代码行的文件:
$productAttributes = $product->ctAttributes;
在我的本地文件中,同一行代码如下:
$productAttributes = $product->getAttributesAsString();
我所做的只是pull --rebase origin dev
。 pull
合并了此更改,但未检测到本地文件与远程文件之间的冲突。它只是选择了远程的。为什么会这样呢?这条路
(不显示冲突)有时我们会丢失很多代码。我哪里不好?
答案 0 :(得分:2)
冲突并不意味着两行代码不匹配。冲突意味着两个更改不兼容。
假设origin/master
中包含以下代码:
var testValue = "A";
我pull
向下复制到本地master
的最新副本,并且都显示此行。
如果同事进行了以下更改并将其push
更改为origin/master
:
var testValue = "B";
现在我的本地副本不一样了,我们所处的情况与您描述的相同。
如果我pull
最新的代码,它将自动更新而不会发生任何冲突。为什么?
Git尝试应用更改var testValue = "A";
-> var testValue = "B";
。在我本地分支的当前状态下,此更改仍然有意义,因此可以应用。
假设我在pull
使用最新代码之前进行了更改:
var testValue = "C";
现在,当我pull
最新代码时,Git尝试应用更改var testValue = "A";
-> var testValue = "B";
-但这不再有意义,因为我的本地代码不是{{1} } =冲突
还有很多,但我认为可以概括为:
Git尝试将更改从特定的起始状态应用于 特定的结束状态-如果当前状态会发生冲突 与指定的起始状态不匹配,否则更改将 被应用