[英]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.