2012-03-24 89 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