【问题标题】:I have a branchZ from where I created a branchA and from that branchA I created a branchB, can I make it so branchB comes from branchZ?我有一个branchZ,我从那里创建了一个branchA,从那个branchA我创建了一个branchB,我可以让branchB来自branchZ吗?
【发布时间】:2022-10-07 22:17:24
【问题描述】:

我目前有这样的事情:

a -- b                  <-- branchZ
      \
       d -- e           <-- branchA
             \
              f -- g    <-- branchB

我想要这样的东西:

       f -- g           <-- branchB
      /
a -- b                  <-- branchZ
      \
       d -- e           <-- branchA
             

这可能吗??

【问题讨论】:

  • 底部图表之前的段落令人困惑。如果您在第一张图的状态下将branchA 合并到branchB 中,则不会发生任何事情。如果您只是问如何从第一个图转到第二个图,以便您只能将 f 和 g 合并到 branchZ 中,那么也许只是问:如何从 graph1 到 graph2,我们可以回答这个问题。
  • 已编辑,谢谢!这实际上是我想做的,从graph1到graph2

标签: git github branch git-branch rebase


【解决方案1】:

有多种方法可以实现这一点。从概念上讲,您正在对branchB 进行硬重置以指向提交b,然后选择提交fg。例如:

git switch branchB
git reset --hard b
git cherry-pick f
git cherry-pick g

使用cherry-pick 有一种更有效的方法,因为如果您的提交是连续的,您可以使用范围,在这种情况下就是这样。范围的诀窍是您指定的第一个提交是您希望包含的第一个提交的父级,如下所示:

git switch branchB
git reset --hard b
git cherry-pick f~1..g

请注意,f~1f 的父级,在本例中是 ebranchA,因此其中任何一个都可以使用。

最后,有一个 rebase 的高级版本,这可能是这里最好的选择,因为它完成了上述命令所做的所有事情,但都在一个命令中:

git rebase f~1 branchB --onto b

换句话说,将branchB 上的所有提交f~1 无法访问的提交按顺序重播到提交b。在这种情况下,您将留下branchB 签出,即使它不是在您开始时。

请注意,分支只是指向提交的指针,使它们可以互换。如果我们使用分支名称而不是提交来进行变基,可能会更容易理解,因此等效的变基命令将是:

git rebase branchA branchB --onto branchZ

换句话说,将branchB 上所有branchA 无法访问的提交,并将它们一一重播到branchZ

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 2014-08-26
    • 2018-05-07
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多