繁体   English   中英

合并时Git分支会覆盖master而不会产生冲突

[英]Git branch overwrites master when merging without offering conflicts

我有一个主项目和一个由它制成的分支。 当我将master与分支合并时,分支中的代码会覆盖master中的代码,我想只在master中插入不同的代码,或者至少要询问我想保留哪些代码。 这是我如何设置所有内容的一个简单示例:

mkdir project
cd project
git init

在项目目录中我有一个名为index.php的文件,代码如下:

<?php

/**
 * This is master code.
 */
class ClassName extends AnotherClass
{

    function __construct(argument)
    {
        // this is from master
    }
}

然后我做分支:

git checkout -b my_branch

我把这个代码放在index.php中:

<?php

/**
 * This is branch code.
 */
class ClassName extends AnotherClass
{

    function __construct(argument)
    {
        // this is from branch
    }
}

然后我结帐并掌握并尝试合并:

git checkout master
git merge my_branch

然后分支代码将覆盖master中的代码。 在我的主人中,我将在分支中使用相同的代码。 不应该git让我选择保留哪些代码,或者有什么方法可以强迫它? 如果没有,我做错了什么?

如果我在分支代码中进行此更改:

class ClassName extends AnotherClass => class ClassName extends MyClass

然后git将执行递归策略合并,并将从分支中取出MyClass并保留master中的所有其他内容。

我不知道我是否向你展示了很好的例子,让我试着再次解释一下情况:

1)我有一些代码master不中是否存在branch
2)我有一些代码branch不存在中的master

我应该如何处理这个并且不会丢失主和分支中的不同代码? 如果不能以一些干净,计划好的方式发生这种情况,我是否至少可以强迫git问我想要对这些差异做些什么? 我只能管理分支覆盖主,这很糟糕。

如果我理解正确,那么你正在检查branch ,从master替换一些代码,然后将branch合并到master

制作分支的重点是,您可以对代码进行更改,然后合并这些更改。

也许一个例子会有所帮助。

假设您在master上有一个只有内容的文件

This is good code

然后你检查了branch并更改了文件说

This is great code

现在,你再次结帐master 现在,文件是

This is good code

如果合并,则文件将更改为

This is great code

但是,如果在合并之前,您更改了文件

This is really amazing code

然后尝试合并,然后git会告诉你存在冲突,并且不会自动合并这些文件。

可能会帮助您获得概念。 基本上,因为master在创建branch后根本没有改变,所以git可以假设您所做的任何更改都是故意的。

合并分支意味着您要add分支建议的changes 不能有选择地合并一个分支。 它整合在一起。

要查看diff b / w两个分支在合并之前要检查的内容,请运行

git diff master my_branch

如果您觉得my_branch的代码不符合您的标准或者是错误的,请不要合并它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM