2012-03-24 85 views
20

我有一堆提交的操作系統項目,我想拉出最後說20提交到另一個分支,所以我可以拉請求。Git從以前的提交範圍創建分支?

我該怎麼做?原因是我可能有150次提交,但其中大部分都是爲了一個更大的貢獻,這還沒有準備好。但下一個版本即將發佈。

謝謝!

回答

56

你可以用cherry-pick來做到這一點。如果您的long_branch歷史是這樣的:

A-B <-- master 
    \ 
    C-D-E-F-G-H <-- long_branch 

並且要到H移動的,也就是說,F的內容,以不同的分支,比方說,short_branch,這是基於關閉的master

git checkout master -b short_branch 

其給出

A-B <-- master, short_branch 
    \ 
    C-D-E-F-G-H <-- long_branch 

然後...(請注意,提交範圍是E..H;左側是非包含爲的範圍內)

git cherry-pick E..H 

這給:

F'-G'-H' <-- short_branch 
/
A-B <-- master 
    \ 
    C-D-E-F-G-H <-- long_branch 

請注意,我指的是新提交的F'G'H' - 這是因爲當他們將含有相同的有效變化FG,和H,他們不會是實際相同的提交(由於不同的父母+提交時間)。

5

是否要將20個提交保留在當前分支上?如果沒有,那麼參考保持當前分支回20提交有:

git checkout -b current_branch_save current_branch~20 

然後,底墊中移動在過去的20個提交

git checkout current_branch 
git rebase --onto another_branch current_branch~20 current_branch 

現在你已經得到current_branch_save你〜100'沒有完全準備好'提交併在另一個分支上的current_branch與最後20.

+1

這真的幫助我擺脫合併衝突。 +1 – 2016-07-05 17:46:47