2016-04-03 18 views
1

在下面的git情形:如何在git中進行合併而無需執行任何更改?

A -- B1 -- B2 -- B3 
    \- C1 -- C2 -- C3 

我想合併成ÇB,產生另一個修改d,使得存在B3和D之間。換言之NO變化,結果是:

A -- B1 -- B2 -- B3 -- D 
    \- C1 -- C2 -- C3 -/ 

和D與B3相同。

使用git merge --strategy-option ours不太正確:它解決了B有利的衝突,但仍然合併了非衝突的更改。

+3

出於好奇,如果您不打算從該分支中​​引入任何更改,那麼合併C的意義何在? –

+0

哦,等等,我猜如果C是主人,而B是你想成爲主人的另一個分支,那麼這是有道理的。 –

+0

@BenLindsay:所有來自C的提交也已經在某個點上被B選中。由於對我來說不明顯的原因,這種合併仍然會導致對B的一系列更改......這肯定是假的,但我確實想合併它以指示所有更改都在B中,而不是選擇在這個過程中發生新的變化。 –

回答

2

Jefromi的回答here應該有所幫助。基本上,假設master分支點Cbetter_branchB,這應該工作:

git checkout better_branch 
git merge --strategy=ours master # keep the content of this branch, but record a merge 
git checkout master 
git merge better_branch    # fast-forward master up to the merge 
+0

這看起來不錯,但我不確定它是否有預期的結果。 'git merge --strategy = ours'只使用'我們'來處理衝突,而不是所有的變化。 –

+1

不真實 - 請參閱[git-merge documentation](https://git-scm.com/docs/git-merge)的合併策略部分下的「我們的」選項。它說:「這可以解析任意數量的頭,但合併的結果樹總是當前分支頭的樹」。我只是試着去仔細檢查一下。例如,執行合併將刪除已添加到要忽略的分支上的文件,在正常合併中不會出現任何預期的衝突。 –

2

我會用

git commit-tree B^{tree} -p B -p C -m "Merge from C but accept no changes" 

此打印提交,您可以快進合併。

commit-tree表示「創建一個提交,其樹與B中當前的相同,它的父項是B和C的當前值」。然後,您可以將此提交快速轉發到B或C.

相關問題