我有一个名为staging
的分支,其中包含我想移动到两个单独分支的旧提交。
A - B - C - D - E - F - G - H - I staging
我想将提交B
和C
移动到一个新的分支:feature-a
。然后将提交D
、E
和F
移动到新分支:feature-b
。
最后,我的分支看起来像这样:
A - G - H - I staging
A - B - C feature-a
A - D - E - F feature-b
staging
分支是公开的,其他开发人员可能有它的本地版本。我怎么能做到这一点?
2条答案
按热度按时间flseospp1#
NB:可能有更好的方法,但这里有一个方法。
创建
feature-a
很简单:我们可以通过基于
A
创建一个新分支,然后使用cherry-pick
来创建feature-b
:git-rev-parse
手册页中记录了该r1..r2
表达式:..(两点)范围表示法
^r1 r2
集合操作出现得如此频繁,以至于有一种简写。当你有两个提交r1
和r2
(根据上面指定修订中解释的语法命名)时,你可以要求从r2
可到达的提交,排除那些通过^r1 r2
从r1
可到达的提交,它可以写成r1..r2
。最后,我们可以在
staging
分支上使用git rebase -i --root
来删除提交B-F:在我的测试存储库中,这会导致:
cclgggtu2#
@larsks的答案很好(被投票赞成),但它也可以在没有任何来自rebase或cherry-picking的交互工作的情况下完成。从原始设置开始
现在你有:
然后:
现在您拥有:
然后:
现在您拥有:
最后你有: