2016-05-05 78 views
3

當我在分支之間合併時,git執行遞歸合併衝突,將<<<<<<< Temporary merge branch x塊放入。git-merge-base只返回一個提交

我放棄合併,然後做git merge-base <source-commit> <target-commit>,但它只返回一個SHA1。

是否有可能找出多個基礎提交是什麼?

回答

4

您希望--all選項爲git-merge-base。從文檔:

-a, --all 
    Output all merge bases for the commits, instead of just one. 

這將顯示將用於創建臨時樹作爲遞歸合併基地的所有合併基地。

例如,考慮一些分支「A」和「B」那是縱橫交錯合併:

 3a4f5a6 -- 973b703 -- a34e5a1 (branch A) 
    /  \/
7c7bf85   X 
     \  /\ 
     8f35f30 -- 3fd4180 -- 723181f (branch B) 

很明顯,分支A和B具有參與縱橫交錯兩個共同祖先合併:3a3f5a68f35f30git-merge-base會選擇共同祖先作爲合併基礎的一個,但使用--all標誌將包括:

% git-merge-base A B 
3a3f5a6ec1c968d1d2d5d20dee0d161a4351f279 
% git-merge-base --all A B 
3a3f5a6ec1c968d1d2d5d20dee0d161a4351f279 
8f35f30bfe09513f96cf8aa4df0834ae34e93bae 

在這種情況下,當你注意,git-merge-recursive將合併兩個合併基礎創建一個虛擬提交將被用作三路合併算法的實際共同祖先。

+0

完美,我錯過了看到在文檔中,我會給它一個去。在你的評論中,似乎你說973b703和3fd4180是共同的祖先。他們不是3a4f5a6和8f35f30嗎? – Lee

+0

哈,是的,請原諒我。我的寫作是不正確的,我顯然無法閱讀下面的圖表*或*工具的輸出。編輯。 –

+2

在理想情況下,所有合併基地具有相同的樹,中間合併產品與其任何投入相同。在實踐中,偶爾不會像你(OP)發現的那樣! :-)另一個說明,後來我檢查了merge-recursive的代碼:如果有三個或更多的合併基礎,這個過程實際上是在這些基礎上迭代的。也就是說,合併首先獲取'--all'列表,然後合併其中的前兩個,然後將每個附加條目重複合併到合併結果中。 – torek

0

有關如何使用一個特定基準重新合併一個特定文件的說明,請參閱this answeryour related question。 [歷史記錄:OP刪除了這個問題,但現在已經復活了;我在這裏得到了答案,但它屬於那裏;因此所有這些鏈接....]

+0

感謝您的時間,我已經取消刪除您指的問題,隨時移動此答案:) http://stackoverflow.com/questions/37049055/git-choose-simpler-base-in -recursive合併 – Lee