2016-06-15 53 views
1

我已经开始在一个特性分支工作,取得了一定的修改和提交。但我没有将这些更改推送到远程跟踪分支。但现在我想创建一个单独的错误修复分支,以便我可以创建拉取请求。 如何创建一个新的分支,其中包含我在当前分支上进行的所有提交历史记录,而无需推送。混帐创建分支与现有的本地提交

我想补充提交图更加清晰。 一个 --- B ---电---Ç--- d ---ê摹

分支所以我所做的更改,其中A已经在远程和本地制造提交BCDEG。现在我想新的分支从盯着所有的本地提交提交BCDEG使审查我可以建立在现有的特性分支新拉的请求提交一个

回答

0

假设你已经在你的功能分支,要创建新的分支,从功能分支开始,只是做:

git checkout -b <new_branch> 

之后,你可以把它推到原点,创造像拉请求:

git push origin <new_branch> 

PS如果我正确理解你的问题。

1

既然你想改变

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

神话般的答案+1,但不完整。请添加最后一位以回答您从'master'签出新bugfix分支的问题(提交A时)。再好的工作,我对这个问题感到困惑,直到你的回答对我来说都是这样。 –

+0

在阅读他的问题3次之后,我认为提交'A'已经存在于一个被跟踪的'特性分支'上,并且他添加了一些错误修复本地签名'BCDEG'。他想把'BCDEG'移动到一个本地bug(局部)分支,这样他就可以在'A'处做'功能分支'的pull请求。我会更新我的答案直接回答问题,但机制是一样的。 –

+0

你可能是对的,这个问题让我感到困惑。无论如何,我认为你的回答清楚地解释了这个机制。荣誉 –