2016-08-10 45 views
1

我知道我可以使用rerere來記錄合併的分辨率與衝突如何記錄非衝突合併的「解決方案」?

但是,這並不能幫助我在我目前的狀況:

我有一個實驗分支,我使用--strategy ours,丟棄我做了有什麼變化,但保持所有的歷史以供將來參考合併到主分支。實驗分支的變化與主分支的任何變化無關,所以有沒有衝突因此rerere沒有記錄任何東西。

現在我要重訂我的歷史(使用--preserve-merges)的一部分,但是因爲沒有衝突,Git會愉快地使用,而不是我原來使用的我們戰略默認策略,重放合併。現在,來自已過時的實驗分支的所有更改都會在我重新設計的主分支中完成(但我希望它們再次被丟棄)。

我該如何教Git記住我使用的合併策略並在重新綁定時重新使用它們?

+0

你不能:merges不記錄任何地方使用的'-s'參數。這是Git中的一個小缺陷,因爲如你所見,'git rebase --preserve-merges'必須重新執行合併。當然,您可以手動標記您的合併(例如使用提交消息),但rebase腳本不會注意到,因此您還需要編寫自己的rebase腳本。 – torek

回答

0

我相信你正在尋求強制遞歸合併。您可以通過添加--no-ff來完成此操作,並且會進行合併提交。

--no-FF

創建一個合併提交即使合併解決的快進。這是合併註釋(可能有符號)標記時的默認行爲。

git-scm documentation

+0

你所描述的是'merge'命令的一個選項。但是我在做'rebase'的時候遇到了問題。現有的合併提交已被重新創建,但合併策略錯誤。 – mkrieger1

+0

啊,我明白了,我很抱歉誤會。 –

1

你也許可以運行git rebase -p -i(互動)和替換採摘帶手動exec git merge -sours ...通話合併。注意我沒有測試它是否工作。

+0

這可能會起作用,儘管我不得不記得每次重新分配時都這樣做,而且當我忘記它時我不會立即注意到。這就是爲什麼我希望Git爲我記住它;) – mkrieger1

1

您也可以使用腳本git-rehi免責聲明:我寫的),其中有正是這個特性:它檢測ours合併(通過比較樹哈希),並重播他們爲ours

還有周圍的其他工具:git-reintegrate,git-remerge等,你可以檢查他們是否這樣做。