A--B--C master
\
D branch0
然後我壓扁B
和C
到B'
。 我如何變基branch0
,使得它看起來像這樣:
A--B' master
\
D branch0
A--B--C master
\
D branch0
然後我壓扁B
和C
到B'
。 我如何變基branch0
,使得它看起來像這樣:
A--B' master
\
D branch0
一個快速的方式,我能想到的是,
git checkout branch0
記下d的SHA通過git log
git checkout master
現在將branch0重命名爲branch1
git branch -m branch0 branch1
A--B' master \ D branch1
現在刪除BRANCH1
git branch -D branch1
再次創建一個branch0如下。 git checkout -b branch0
A--B' - master&branch0
上面的命令master和branch0是一樣的。只有改變我們需要branch0要提出的是獲得承諾D.
git cherry-pick D
現在branch0看起來如下
A--B' master \ D branch0
使用--onto
參數與git底墊中,從而改變了基線git重播工作。
git checkout branch0
在這種狀態下,你仍然應該在你的git歷史IIUC中看到C.
git rebase --onto B' C
這意味着「採取一切提交在我目前的分公司自提交C(在你的情況那只是d)和play銀行ontop的B'的」
您也可以使用可選的<branch>
參數同時做結帳和rebase:
git rebase --onto B' C branch0
沒有結帳(更短):'git rebase - 主人C branch0' – jbaptperez
謝謝。我已將這一建議添加到答案中。我還重新排序了上游和上游參數,以便與您的git手冊頁相匹配(即使進行了簡短測試的逆向作品)。 – pcrost