我有一堆关于一个操作系统项目的提交,我想把最近的20个提交单独提取到另一个分支中,以便我可以发起pull request。
我该如何操作呢?原因是我的提交可能有150个,但其中大部分是针对一个更大的贡献,该贡献还没有准备好。但下一个版本即将发布。
谢谢!
我该如何操作呢?原因是我的提交可能有150个,但其中大部分是针对一个更大的贡献,该贡献还没有准备好。但下一个版本即将发布。
谢谢!
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
相同的有效更改,但它们不会是实际上相同的提交(因为有不同的父级和提交时间)。您是否希望保留当前分支的前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在另一个分支上有最后的20个提交记录。
git rebase --onto another_branch 39ai32^ current_branch
命令,其中39ai32
是您想保留的最早提交的哈希值。 - silico-biomancer