我有一堆OS项目的提交,我想把最后说的20个提交拉到另一个分支,所以我可以提取请求。
我怎么能这样做?原因是我可能有150次提交,但其中大多数都是为了更大的贡献,还没有准备好。但下一个版本即将发布。
谢谢!
答案 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
相同的有效更改, G
和H
,它们不会是实际相同的提交(由于父母+提交时间不同)。
答案 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个。