2016-11-29 16 views
0

我不是混蛋高手所以原諒我,如果我到一些可怕的錯誤。的Git是從每個人的一個分支的所有變化,就好像我自己的變化

我在一個團隊項目,我已經創建了從分支X一個新的分支Z(這是我們的發展分支),使我改變它,它已經在我的本地分支爲一個星期左右。與此同時,我們的團隊決定切換到一種方法,並使用新的分支Y作爲開發分支。從那以後,其他人(以及我,在其他任務中)的每一次提交都被分派到Y.今天,我想將分支Z中的更改合併到新的開發分支Y.我已經將總共約15個文件總共。然而,當我嘗試合併分支時,git(我們在Visual Studio Online上,如果它有什麼區別),我在13個文件(包括一些我甚至沒有碰過我的整個生活的文件)上遇到了合併衝突。我在Visual Studio中說「中止」。去分支Y,與它同步(如果需要的話,它會提取,拉取和按順序),返回到我的分支Z,合併更改並嘗試再次同步。它說我是最新的。我已經打開拉入請求合併ž到Y和這裏是麻煩:

的Git認爲所有提交/被大家在球隊的最後一週做我的變化而變化。該拉取請求包括字面上由已經在分支Y上的其他人完成的數百個更改。我怎樣才能使我的Pull請求只包含我在分支中的更改,爲什麼Git甚至試圖將更改合併到Y上已有的更改上,並將它們顯示爲它們全部是我的更改(當它不是時) ?

+0

您是否有單獨提交的要在Y合併的更改? – Deep

+1

有關您將Y合併到Z中的方式將新的差異/補丁引入提交歷史記錄。最好的辦法是(1)將預先合併的Z重新整合到Y上,然後在那裏打開一個新的PR,或者(2)創建一個新的主題分支並挑選出所有相關的補丁。 – Pockets

+0

@Deep不幸的是。 –

回答

1

我想在合併XZ,然後試圖將其合併到Y有什麼問題或提到您的git的歷史Pockets打破。我沒有的爲什麼發生這種情況,但我跟隨在這種情況下,創建從主分支一個新的分支和cherry-pick將提交確切的答案:

git checkout Y 
git fetch origin && git pull origin Y 
git checkout -b new_X 
git cherry-pick commit_hash 

如果你有多次提交然後cherry-pick的提交按照順序的方式,比如挑選首先承諾的承諾等等。

您也有一個選項,rebase分支,但有時墊底的原因有很多的衝突,如果做錯了或在這些類型的案件。這只是我個人經歷的衝突,而重新啓動我並不是說它會一直到來,所以在這種情況下,我更喜歡cherry-pick而不是rebase

+0

我會選擇櫻桃(儘管它不是一個單獨的提交,這只是我可以選擇的一小部分)。但是,我想了解這個問題背後的真正原因,以便從長遠來看避免它。 –

1

有一件重要的事情,您必須確定是否存在名爲Z的分支,它存在於遠程(可能由您推送或由其他人創建)。

如果分支中的Z遠程存儲庫中存在,它有沉重的機率是其他人修改分支Z.因此,它不僅包含更改您從遠程拉後。所以你必須找到你提交的那些提交歷史。有兩種方法可以重播你的分支的Z改變分支Y如下(我們可以使用圖表來說明):

   I---J Y 
      /  
A---B---C---H   X (development) 
    \ 
     D---E---F---G Z 
  1. 找出你所做出的改變。假設在分支Z上,提交D到F由您創建,因此您可以使用git checkout Zgit reset --hard HEAD~,因此HEAD將指向分支Z上的F.

可以重播的變化直接分支Y,使用git rebase --onto Y <commit id for B> Z,結果將是:

   I---J---D’---E’---F’ Y 
      /  
A---B---C---H       X (development) 
  • 爲了不打擾別人的變化,你也可以創建新分支並在其上覆制您的更改。使用這些命令:
  • git checkout Z

    git checkout <commit id for F>

    git checkout -b newZ

    ,然後你可以create a pull request to merge branch newZ into branch Y,本次合併對您的更改。

    如果Z分支肯定只存在於您本地的倉庫中,那麼這些文件實際上是由Y分支中的其他開發人員修改的。比如文件test.cs在Z分支中沒有被修改,但其他開發者在Y分支中修改了它。將Z合併到Y時,test.cs文件將顯示衝突。

    +0

    nope,Z不存在遠程。我爲它創建了一個獨特的名稱,它來自於我正在處理的任務,我100%確定(並確認)沒有分支具有相同的名稱。 –

    +0

    @CanPoyrazoğlu。正如你確信的那樣,所以你沒有任何隱患可以繼續合併。你找到一些你沒有修改但出現在合併衝突中的文件是由其他開發者在Y分支中修改這些文件引起的。我在回答中添加了這種情況,如果真的有幫助,請將其標記爲答案。 –

    +0

    我確定沒有人修改過400個文件。 MONTHS的任何人都沒有觸及過「更改過」的文件。 –

    相關問題