既然你想改变
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请求。我会更新我的答案直接回答问题,但机制是一样的。 –
你可能是对的,这个问题让我感到困惑。无论如何,我认为你的回答清楚地解释了这个机制。荣誉 –