2014-10-12 54 views
0

我知道git merge-base獲得兩個分支的最佳共同父項。但是,如何獲得一個補丁集合,這個補丁集合給了我一個補丁來應用於其中一個分支,以便讓它到達另一個分支所在的位置?在兩個分支之間找到補丁的腳本

Git開發是非線性的,這意味着您可以找到許多這些補丁集。我瞄準一個。

此補丁集的基礎案例是其中沒有發生合併的whitin新分支,從分支HEAD到共同祖先的路徑可作爲補丁集(也是唯一的一個)。

感應殼體當合並在祖先和分支HEAD之間此路徑被發現是:

  1. 所有頭之間的路徑提交和包括在子合併。
  2. 子合併提交包含
  3. 找到最接近的子祖先,它是祖先的子代。
  4. 這個子合併和這個子祖先之間的所有提交都被忽略。
  5. 在這個子祖先和祖先之間設置的最短補丁與這個集合在一起。
  6. 如果在步驟3中未找到子祖先,則包括作爲祖先子節點的分支的所有提交(合併與不包含祖先的分支合併)。

這是一個複雜的操作git已經做到了。試圖將它重現到這個補丁集是很困難的。腳本如何實現這一目標?

回答

1

你的問題對我來說很難分析,但聽起來很像你只是問git rebase如何工作?它生成的格式補丁是這樣的

git format-patch -k --stdout --full-index --cherry-pick --right-only --src-prefix=a/ --dst-prefix=b/ --no-renames --no-cover-letter BRANCH1...BRANCH2 
+0

你說得對。我的問題很難理解。我相信我甚至在解釋算法時犯了錯誤。你回答什麼? – 2014-10-12 17:38:28

+0

這就是'git rebase'調用來獲取要應用的補丁列表,這就是你聽起來像是在 – 2014-10-14 19:01:53