2016-06-15 93 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

你可能是對的,這個問題讓我感到困惑。無論如何,我認爲你的回答清楚地解釋了這個機制。榮譽 –