[英]How to force a common ancestor in a git merge?
假設我有一個名為master
的分支和一個名為upstream_lib
的分支。
分支master
有一個子目錄lib
,它基於分支upstream_lib
上的代碼; upstream_lib
中的更改會定期與master
分支合並(使用子樹策略)。 master
的lib
目錄有自己的一些修改,不在upstream_lib
。
但是,假設兩個分支沒有共同的歷史記錄(例如,因為存儲庫剛剛遷移到git),或者合並基礎不正確,因為upstream_lib
的合並已經被壓縮,有一些變基或其他什么。
現在的問題是:給出一組新的變化upstream_lib
,如何強制合並考慮的共同祖先的一個特定修訂upstream_lib
?
我從來沒有使用的subtree
的策略,所以也許這是一個次優的解決方案(也許它不會工作^^),但你可以應用所有新提交upstream_lib
到臨時黨支部關閉的master
行,然后合並那。 我想到的並不是從根本上解決你的情況,所以每次你想要引入新的變化時你都必須做這種“手動合並”,但這是它的工作原理:
master
祖先行中的假共同祖先,比如master~100
。 upstream_lib
行中的偽共同祖先,比如upstream_lib~150
。 upstream_lib
分支的一次性副本: git branch --no-track new_upstream_lib upstream_lib
使用帶有子樹選項的遞歸策略將new_upstream_lib
引導到master~100
。 (我認為你不能只使用子樹策略,因為正如你所說, master
的lib
目錄有自己的變化。)這是一個完全未經測試的命令:
git rebase -s recursive -X subtree=lib --onto master~100 upstream_lib~150 new_upstream_lib
請注意, new_upstream_lib
現在包含整個master
樹,即使您只關心lib
目錄。
git checkout master && git merge new_upstream_lib && git branch -d new_upstream_lib
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.