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


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

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

谢谢!


23
2018-03-24 17:07


起源




答案:


你可以这样做 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'  - 这是因为虽然它们将包含与之相同的有效变化 FG,和 H,它们不会是实际相同的提交(由于不同的父母+提交时间)。


60
2018-03-24 17:22





你想让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。


5
2018-03-24 17:58



这真的帮助我摆脱了合并冲突。 +1 - Daniel Harris