我有一个主项目和一个由它制成的分支。当我将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
并保留其他所有内容。
我不知道我是否向你展示了很好的例子,让我试着再次解释一下情况:
1)我在master
中有一些branch
中不存在的代码
2)我在branch
中有一些master
中不存在的代码。
我应该如何处理这个并且不会丢失master和branch中的不同代码?如果不能以一些干净,计划好的方式发生这种情况,我是否至少可以强迫git问我想要对这些差异做些什么?我只能管理分支覆盖主,这很糟糕。
答案 0 :(得分:2)
如果我理解正确,那么您正在查看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会告诉你存在冲突,并且不会自动合并这些文件。
This可能会帮助您获得概念。基本上,因为master
创建branch
后根本没有改变,所以git可以假设您所做的任何更改都是故意的。
答案 1 :(得分:1)
合并分支意味着您希望add
分支建议的changes
。您可以 NOT 有选择地合并分支。它整合在一起。
要查看在合并前要检查的差异b / w两个分支是什么,请运行
git diff master my_branch
如果您不认为my_branch
中的代码符合您的标准或是错误的,请不要合并。