簡體   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