2014-01-13 80 views
2

對於標題很抱歉,很難用連貫的句子總結這個文件。Git合併除一個文件以外的所有文件,並且該文件成爲(完整)衝突文件

我見過很多其他人要求合併除一個或兩個文件以外,櫻桃採摘通常是這裏的建議。但是我不確定如何做到這一點,並且找不到類似的問題。

基本上我有兩個分支,讓我們打電話給他們devrefactor。 我想合併refactor分支到dev,通常做。

refactor包含一些新文件和一個圍繞主邏輯完全不同的文件(讓我們打電話給file);我想合併分支,但是我想file有衝突,或者至少是類似的。

// file in <dev> 
lots of code 
loop 
    main logic 
lots more code 

重構的要點是消除對大的高度嵌套循環的需求。在重構的代碼的形式是:

// file in <refactor> 
lots of code 
BLANK (where main logic ought to be) 
lots more code 

我想整個文件到流行到「衝突模式」或什麼的,這樣我可以有選擇地讓主要邏輯出原始的新和成。

這不僅僅是文件中的一個事件,有幾個,但這只是給出一個想法。

這可能嗎?或者我將不得不在手動合併之前手動將dev的代碼複製到refactor

回答

3

您可以嘗試使用custom merge driver來表示該文件有衝突。但是,只有在當前分支和要合併的分支中,自從存儲在合併基礎中的版本以後,纔會觸及該文件。


如果你已經知道你要在合併後,但在提交之前手動編輯的文件,我只是跑git merge --no-commit ...。由此產生的合併很可能被標記爲「準備好提交」,但您可以先編輯它,然後編輯它(然後編輯結果git add)。您所做的最終手冊git commit將作爲合併提交,因爲合併過程會將文件保存在.git目錄中以記錄此文件。

不管是否存在任何衝突,在編輯時,您可以通過git show HEAD:filegit show branch:file查看文件file的這兩個版本。如果需要,將結果轉儲到臨時文件中。

有沒有看到共祖先版本完全微不足道的方式,但是這兩個步驟的方法做一個類Unix外殼:

ancestor=$(git merge-base HEAD branch) 
git show ${ancestor}:file 

(或者,您可以簡化成這樣:

git show $(git merge-base HEAD branch):file 

在這同樣的方法這兩種情況下:首先我們重複的合併基礎計算的是git merge做,然後我們使用選擇的修訂show文件file。)

+0

感謝您的意見,我發現在撰寫本文時我不需要這個問題,但現在已經變得需要了。 – parnmatt

相關問題