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

Ste*_*ven 26 git

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

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

谢谢!

Amb*_*ber 72

你可以这样做cherry-pick.如果您的历史long_branch看起来像这样:

A-B  <-- master
   \
    C-D-E-F-G-H  <-- long_branch
Run Code Online (Sandbox Code Playgroud)

并且你想把F到H的内容移动到另一个分支,比如说short_branch,它基于master:

git checkout master -b short_branch
Run Code Online (Sandbox Code Playgroud)

这使

A-B  <-- master, short_branch
   \
    C-D-E-F-G-H  <-- long_branch
Run Code Online (Sandbox Code Playgroud)

然后...(注意提交范围是E..H;左边是范围的非包含性)

git cherry-pick E..H
Run Code Online (Sandbox Code Playgroud)

这使:

    F'-G'-H'  <-- short_branch
   /
A-B  <-- master
   \
    C-D-E-F-G-H  <-- long_branch
Run Code Online (Sandbox Code Playgroud)

请注意,我指的是新提交的F',G',H'-这是因为当他们将含有相同的有效变化F,G以及H,他们不会实际提交相同(由于不同的父母+提交时间).

  • 哇,如果可以的话,我会投两次票。一个非常简洁、不深奥的示例,非常容易理解并且涵盖了陷阱。谢谢! (2认同)

GoZ*_*ner 7

你想要20个提交保留在当前分支上吗?如果没有,那么保持对当前分支的引用20提交:

git checkout -b current_branch_save current_branch~20
Run Code Online (Sandbox Code Playgroud)

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

git checkout current_branch
git rebase --onto another_branch current_branch~20 current_branch
Run Code Online (Sandbox Code Playgroud)

现在你有了current_branch_save,你的~100'还没有准备好'提交,而last_branch上有current_branch,最后20个.

  • 这确实帮助我摆脱了合并冲突。+1 (2认同)