2015-07-21 103 views
1

我有一個主項目和一個分支。當我將master與branch合併時,branch中的代碼覆蓋master中的代碼,並且我想只在master中插入不同的代碼,或者至少要問我想保留哪個代碼。下面是我如何建立一個一切簡單的例子:Git分支合併時會覆蓋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

然後分支代碼將覆蓋一位來自主人。在我的主人,我會有像分支一樣的代碼。 git不應該讓我選擇保留哪些代碼,還是有什麼辦法強制這樣做?如果不是,我做錯了什麼?

如果我讓在分支代碼這一變化:

class ClassName extends AnotherClass => class ClassName extends MyClass

然後混帳會做遞歸的戰略合併,並會採取從支MyClass並保留一切從主。

我不知道如果我向您展示很好的例子,讓我嘗試再一次說明情況,請與我裸露:

1)我有一些代碼在master不中branch存在。
2)我在branch中有一些代碼在master中不存在。

我應該如何處理這個問題,而不是在主分支中丟失不同的代碼?如果這不可能發生在一些乾淨而有計劃的方式上,我能否至少強迫我問我想要處理這些差異?我只能管理分支覆蓋主,這是不好的。

我真的很困惑。謝謝

回答

1

合併分支意味着您想要add分支建議的changes。你可以不是選擇合併一個分支。它得到整體合併。

要了解什麼是差速器的B/W兩個分支用於合併前審查,運行

git diff master my_branch

如果你不喜歡在my_branch代碼到你的標準或者是errorenous ,不要合併它。

+0

謝謝我會嘗試與差異 – offline

+0

@offline如果它回答我們的問題,您可以接受它。 –

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可以假設你所做的任何修改都是故意的。

+0

謝謝。那麼問題在於人們在主人做出改變的同時其他人在分支上工作。通過嘗試從分支中的主設備推送所有新代碼是否是解決此問題的好方法?那麼就不會有問題了,對吧? – offline

+1

沒錯。如果有兩個人在同一行上更改了代碼,它會問你要保留哪一個,就像你想要的一樣。 –

+0

對於我來說,作爲一種很好的方式將主變更從分支轉移到分支,而不會丟失分支中的新代碼:'git merge origin/master',或'git fetch' +'git rebase origin/master',或者手動這樣做? – offline