我目前有這樣的事情:
a -- b <-- branchZ
\
d -- e <-- branchA
\
f -- g <-- branchB
我想要這樣的東西:
f -- g <-- branchB
/
a -- b <-- branchZ
\
d -- e <-- branchA
這可能嗎??
uj5u.com熱心網友回復:
有多種方法可以實作這一點。從概念上講,您正在branchB對指向提交進行硬重置,b然后選擇提交f和g. 例如:
git switch branchB
git reset --hard b
git cherry-pick f
git cherry-pick g
有一種更有效的使用方式,cherry-pick因為如果您的提交是連續的,您可以使用范圍,在這種情況下就是這樣。范圍的訣竅是您指定的第一個提交是您希望包含的第一個提交的父級,如下所示:
git switch branchB
git reset --hard b
git cherry-pick f~1..g
請注意,f~1是 的父級f,在這種情況下是e,并且branchA,所以其中任何一個都可以作業。
最后,有一個 rebase 的高級版本,這可能是這里最好的選擇,因為它完成了上述命令所做的所有事情,但都在一個命令中:
git rebase f~1 branchB --onto b
換句話說,將所有branchB無法通過 commit 訪問的提交f~1按順序重播到 commit 上b。在這種情況下branchB,即使不是在您開始時,您也將被簽出。
請注意,分支只是指向提交的指標,使它們可以互換。如果我們使用分支名稱而不是提交來進行變基,可能會更容易理解,因此等效的變基命令將是:
git rebase branchA branchB --onto branchZ
換句話說,接受所有branchB無法訪問的提交branchA并將它們一一重播到branchZ.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/512134.html
上一篇:選擇哪個選項來臨時保留分支更改
