![](/img/trans.png)
[英]How to test code from a Git branch without merging it with master branch?
[英]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.