2012-09-05 82 views
0

好吧,我有以下情況。我有一個叫的分支開發
從開發我創建了一個叫做AIOEC-393的分支。
它包含如下的提交:如何從一個分支提交一些提交併將這些提交與git中的另一個分支合併

nicoladj77重新安裝的WordPress 938f469

nicoladj77 AIOEC-122:刪除解析css文件d10e29e

:增加了對ai1ec_events 2254569

nicoladj77 AIOEC-122供稿nicoladj77 AIOEC-122:對功能添加評論38054dd

nicoladj77 AIOEC-393:Sta rting移動文件6f92360

nicoladj77 AIOEC-393移動類和拿出require_once調用 b7ab691

nicoladj77 AIOEC-393:開始移動基礎容器87e8b91

nicoladj77 AIOEC-393:感動類的建議和重構一個 一會兒我...... 1093032

我需要建立一個基於另一個分支開發和CONTA僅插入最後四次提交的AIOEC-393(當然是以AIOEC-393開頭的提交)。我怎樣才能做到這一點?

回答

2

git cherry-pick可以做到這一點。只需將要合併到當前分支中的提交ID作爲該命令的參數。這將會「櫻桃挑選」提交,即使提交屬於不同的分支。

或者說,什麼也應努力爲:

  1. 克隆/簽出分支
  2. 倒帶一批提交的(復位 - 硬commit_ID)
  3. 摘櫻桃的提交你想

這可以避免做一個rebase。

+0

不,我只想做一個新的分支,它是「發展」 +最新的四次提交 –

+0

是的,看看更新後的答案。應該工作 – ritter

+1

'reset --hard'是危險的建議... – knittl

1

如果提交對你的分支的第一個提交,你可以簡單地簽出最後一次提交,並在其位置創建一個新的分支:

git checkout -b new_branch <id of "AIOEC-393: Starting to move files 6f92360"> 

如果有其他的提交(不希望)您在新的分支想要提交之前,創建一個新的分支,它變基:

git checkout -b new_branch <last commit you want> 
git rebase --onto develop <commit before your commits> new_branch 

或者,創建一個分支關閉develop和櫻桃挑選你想要的提交:

git checkout -b new_branch develop 
git cherry-pick <commit before your commits>..<last commit you want> 
1

我建議你與rebase onto解決方案。假設我們有以下回購:

[email protected] c:/_TEMP/FOO (AIOEC-393) $ git lga 
* 8c2d5c5 - (HEAD, AIOEC-393) commit5 (Yanflea 2 minutes ago) 
* 3c20e52 - commit4 (Yanflea 2 minutes ago) 
* c5383af - commit3 (Yanflea 2 minutes ago) 
* fb11e98 - commit2 (Yanflea 2 minutes ago) 
* e019261 - (develop) commit1 (Yanflea 2 minutes ago) 
* 0cfe064 - (master) Initial commit (Yanflea 2 minutes ago) 

而且你想擁有從AIOEC-393分公司所有提交除commit2

讓我們進入到一個 '臨時' 分支(因此AIOEC-393沒有被修改):

$ git checkout -b develop-target 

,然後使用commit2爲支點使用rebase onto命令:

$ git rebase --onto develop fb11e98 develop-target 

讓我們來看看日誌:

[email protected] c:/_TEMP/FOO (develop-target) $ git lga 
* 7bcb162 - (HEAD, develop-target) commit5 (Yanflea 2 minutes ago) 
* 3c89459 - commit4 (Yanflea 2 minutes ago) 
* e6ed5f7 - commit3 (Yanflea 2 minutes ago) 
* e019261 - (develop) commit1 (Yanflea 2 minutes ago) 
* 0cfe064 - (master) Initial commit (Yanflea 2 minutes ago) 

現在我們只需要快進從developdevelop-target(然後刪除develop-target):

$ git checkout develop 
$ git rebase develop-target 
$ git branch -d develop-target 

日誌:

[email protected] c:/_TEMP/FOO (develop) $ git lga 
* 7bcb162 - (HEAD, develop) commit5 (Yanflea 2 minutes ago) 
* 3c89459 - commit4 (Yanflea 2 minutes ago) 
* e6ed5f7 - commit3 (Yanflea 2 minutes ago) 
* e019261 - commit1 (Yanflea 2 minutes ago) 
* 0cfe064 - (master) Initial commit (Yanflea 2 minutes ago) 
相關問題