簡體   English   中英

如何在git合並中強制共同的祖先?

[英]How to force a common ancestor in a git merge?

假設我有一個名為master的分支和一個名為upstream_lib的分支。

分支master有一個子目錄lib ,它基於分支upstream_lib上的代碼; upstream_lib中的更改會定期與master分支合並(使用子樹策略)。 masterlib目錄有自己的一些修改,不在upstream_lib

但是,假設兩個分支沒有共同的歷史記錄(例如,因為存儲庫剛剛遷移到git),或者合並基礎不正確,因為upstream_lib的合並已經被壓縮,有一些變基或其他什么。

現在的問題是:給出一組新的變化upstream_lib ,如何強制合並考慮的共同祖先的一個特定修訂upstream_lib

我從來沒有使用的subtree的策略,所以也許這是一個次優的解決方案(也許它不會工作^^),但你可以應用所有新提交upstream_lib到臨時黨支部關閉的master行,然后合並那。 我想到的並不是從根本上解決你的情況,所以每次你想要引入新的變化時你都必須做這種“手動合並”,但這是它的工作原理:

  1. 確定master祖先行中的假共同祖先,比如master~100
  2. 確定upstream_lib行中的偽共同祖先,比如upstream_lib~150
  3. 制作一個關於upstream_lib分支的一次性副本: git branch --no-track new_upstream_lib upstream_lib
  4. 使用帶有子樹選項的遞歸策略將new_upstream_lib引導到master~100 (我認為你不能只使用子樹策略,因為正如你所說, masterlib目錄有自己的變化。)這是一個完全未經測試的命令:

     git rebase -s recursive -X subtree=lib --onto master~100 upstream_lib~150 new_upstream_lib 

    請注意, new_upstream_lib現在包含整個master樹,即使您只關心lib目錄。

  5. 合並它: git checkout master && git merge new_upstream_lib && git branch -d new_upstream_lib

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM