当只有一个已更改时,我在两个本地分支之间的合并上遇到冲突。更糟糕的是,冲突标记毫无意义。这已经发生过两次了。有人能告诉我这里发生了什么,以及如何避免它?
看起来合并是将文件的左右版本与基础进行比较,而不是相互比较。我对一段时间没有改变的东西感到矛盾。
git checkout -b dev
git checkout master; git commit --squash dev
git checkout dev; git merge master
此时问题就出现了。
首先:我遇到了合并冲突。这对我没有意义;唯一的变化是'主'。三方合并应该干净利落地解决。
我认为使用commit --squash会使合并的基本文件比其他版本更旧,但我已经手动比较了有问题的文件的所有三个版本,我仍然不喜欢看到了。大多数标记的更改是基础中缺少的部分,但在左侧和右侧版本中相同。不应该合并看到没有变化吗?
其次:我所拥有的合并标记已被破坏。来自左侧版本的部件与来自正确版本的部件不匹配。这是正常的吗?
一些示例代码。这里唯一的实际变化是添加了行def buffer b-product for product.
(看看“SKU Missing”代码如何在第一个冲突块的左侧块中,但是第二个的右侧块冲突阻止?):
<<<<<<< HEAD
if not avail b-orddet
then
{&throw} ("No gapnet-orddet record", 300).
op-errorred = no.
/** SKU missing **/
if b-orddet.sku = ?
or b-orddet.sku = ""
then
do:
run make_report_line
( input b-orddet.order-num,
input b-orddet.line-no,
input "e",
input "SKU not set" ).
op-errorred = yes.
end.
=======
def buffer b-product for product.
if not avail b-orddet
then
{&throw} ("No gapnet-orddet record", 300).
>>>>>>> master
op-errorred = no.
<<<<<<< HEAD
/** SKU doesn't match an Accord product **/
if not can-find( product
where product.p-code = b-orddet.sku )
then
do:
=======
/** SKU missing **/
if b-orddet.sku = ?
or b-orddet.sku = ""
then
do:
run make_report_line
( input b-orddet.order-num,
input b-orddet.line-no,
input "e",
input "SKU not set" ).
op-errorred = yes.
end.
find b-product
where b-product.p-code = b-orddet.sku
no-lock no-error.
/** SKU doesn't match an Accord product **/
if not avail b-product
then
do:
>>>>>>> master
答案 0 :(得分:-1)
如果要从主分区合并到分支
git fetch origin/branch
git reset --hard origin/branch
git pull
git merge master