Git从之前提交的范围创建分支?

时间:2012-03-24 17:07:47

标签: git

我有一堆OS项目的提交,我想把最后说的20个提交拉到另一个分支,所以我可以提取请求。

我怎么能这样做?原因是我可能有150次提交,但其中大多数都是为了更大的贡献,还没有准备好。但下一个版本即将发布。

谢谢!

2 个答案:

答案 0 :(得分:64)

您可以使用cherry-pick执行此操作。如果long_branch的历史记录如下:

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

并且您希望将F到H的内容移动到另一个分支,例如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' - 这是因为虽然它们将包含与F相同的有效更改, GH,它们不会是实际相同的提交(由于父母+提交时间不同)。

答案 1 :(得分:6)

您是否希望20个提交保留在当前分支上?如果没有,那么保持对当前分支的引用20提交:

git checkout -b current_branch_save current_branch~20

然后,使用rebase移动最后20次提交

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

现在你的current_branch_save你的~100'还没准备好'提交,而current_branch在another_branch上,最后20个。