強制重新分配的通常原因是合併承諾的病態仇恨,因爲制定政策的人看不到他們的價值。目前還不清楚爲什麼你想採用rebase的缺點(很可能中間的commit不會被測試),但仍然會合並;這對我來說似乎是最有價值的合併提交可能。但如果你必須...
你意味着你想接受的合併將是「空」;這不完全正確。它將更改應用到其第一個父項(儘管不是它的第二個父項,因爲如果允許,它將是快進)。
我認爲你是真的說的是,如果第一個父代從第二個父代到達(通過父指針),你會接受合併。所以,你可以採取的
git rev-list --merges $oldrev..$newrev
輸出並互相喂導致
git merge-base --is-ancestor commit-ID^ commit-ID^2
提交ID爲提交-ID參數拒絕,如果merge-base
命令永遠返回非零值。
(技術上我猜你可能還需要確保承諾並未有3周或以上的父母。)
仍然允許這樣的事情
(origin/master)
|
x -- x -- x -------------------- M <--(master)
\ /
x -- x -------x -- x
\ /
x -- x
如果避開這是一個規則,這是非常困難的;你基本上會希望通過頭提交的第一個父指針可以達到每一個合併。 (但你不能只是說,合併應該可以訪問從頭部提交的第一父,因爲那時你還是會允許
(origin/master)
|
x -- x -- x -------------------- M -- x<--(master)
\ /
x -- x -------x -- x
\ /
x -- x
這是一樣的。)所以你可以,也許,作爲一個「第一步」你開始尋找合併之前,做一個
git rev-list --first-parent $oldrev..$newrev
,並掛到返回所有提交ID值的列表,從而你會發現每個合併可以確認它在該列表中。
如果這一切聽起來都沒有樂趣,我完全同意;這就是爲什麼我不會試圖從這個建議中組裝一個工作腳本的原因,爲什麼我建議你允許合併或不要試圖採取這樣不尋常的中間立場。
謝謝您的詳細解答。 重新分配功能分支會在主設備上次更改時進行測試。 我接受快進合併,但有時保持分支的繪圖有時很有趣。 – Benito103e
* rebase特性分支的*上次提交將被測試。中間提交,不太可能。除非您測試並修復現在重新設計的分支中的每個* before * commit,否則您最終可能會得到'x-x - O - x - O - x - x - x - O',其中'x'可能無法正確構建或運行,如果您想要使用「bisect」來追蹤缺陷,這特別麻煩。 –
這是一個很好的示範,事實上是的,你需要測試,最終在rebase之後修復所有之前的提交。 – Benito103e