既然你想改變
A` <-- A <-- B <-- C <-- D <-- E <-- G
^origin/feature ^HEAD, feature
到
-- B <-- C <-- D <-- E <-- G
/ ^HEAD, bug-fix
A' <-- A
^ ^feature
|
origin/feature
首先,您需要創建分支
git branch bug-fix
這給你一個圖
A' <-- A <-- B <-- C <-- D <-- E <-- G
^origin/feature ^feature, bug-fix, HEAD
請注意,您仍然在feature
分支上,您只需製作bug-fix
分支,不要結帳。
接下來,需要與reset
去除feature
(B,C,d,E,G)的提交(A
這裏是提交的SHA1哈希,也可以使用相對HEAD
位置):
git reset --hard A
注意,你將失去功能任何提交的工作 - 執行該命令之前,請務必瞭解reset
命令的危險。全部復位也就是「推」的feature
指針提交A.
然後簽出新的分支,把你的功能分支修改爲pull請求:
git checkout bug-fix
git push
這給了你所期望的圖的:
-- B <-- C <-- D <-- E <-- G
/ ^HEAD, bug-fix
A' <-- A
^origin/feature, feature
神話般的答案+1,但不完整。請添加最後一位以回答您從'master'簽出新bugfix分支的問題(提交A時)。再好的工作,我對這個問題感到困惑,直到你的回答對我來說都是這樣。 –
在閱讀他的問題3次之後,我認爲提交'A'已經存在於一個被跟蹤的'特性分支'上,並且他添加了一些錯誤修復本地簽名'BCDEG'。他想把'BCDEG'移動到一個本地bug(局部)分支,這樣他就可以在'A'處做'功能分支'的pull請求。我會更新我的答案直接回答問題,但機制是一樣的。 –
你可能是對的,這個問題讓我感到困惑。無論如何,我認爲你的回答清楚地解釋了這個機制。榮譽 –