【问题标题】:git: merging feature branches into earlier part of master linegit:将功能分支合并到主线的早期部分
【发布时间】:2011-05-10 20:27:32
【问题描述】:

我确定以前有人问过这个问题,但我什至不确定我要查找的术语是什么。

我有一个如下所示的分支结构:

startoftime -> A -> B -> C -> D (master head)
                    |
                    -> X -> Y (feature1 head)(tag T)
                    |
                    -> Q -> R (feature2 head)

基本上我从提交 B 创建了两个功能分支并在其中进行了开发。其中一个的头上有一个标签,反映了它从原始根源的整体历史。现在我想将它们折叠回 master,但理想情况下,我希望它们出现在历史记录中之前 master 上的新内容,而不是之后,因此将当前 master 头留在原处。理想情况下,我会这样:

startoftime -> A -> B -> X -> Y -> Q -> R -> C -> D (master head)
                              |
                            (tag T)

我应该在这里查看哪些概念或命令?

有人建议rebase 可能是我在这里所追求的。所有这三个分支都已经被推送到我的遥控器上,尽管我可以保证除了我之外没有人从中拉出/签出。我还能使用变基吗?

谢谢。

【问题讨论】:

    标签: git merge branch


    【解决方案1】:

    只要没有其他人使用您的分支,变基就不是问题。不管它是否“远程”。下次推送时只需使用--force

    话虽如此,我想鼓励您重新考虑仅使用合并。您的历史仍将显示功能开发时间的时间表,但它还将更准确地反映您并行工作的历史,以及您将其集成到主分支的时间。如果您进行变基,您当前的Q 将与您最初处理它时的Q 不同,如果您不得不返回它,它可能不会像您期望的那样工作。此外,如果出于某种原因需要,它可以更轻松地删除功能 1 或功能 2。

    【讨论】:

    • 谢谢卡尔。这是有道理的。我已经编辑了上面的内容,以注意 Y 上存在一个标签,如果需要,我希望能够返回到该标签。如果包含 Y 的分支继续存在,我想这仍然存在。那么我要合并到master's HEAD吗?或者我可以在之前的提交之前合并到它的历史中间吗?
    • @quixoto,是的,你通常会合并到主人的 HEAD 中。您的更改仍将显示在日志的前面,但您将有合并提交,显示您进行集成的时间。
    • 卡尔,谢谢。我接受了你的建议。如果我愿意,我可以安全地摆脱开发分支,保留我现在在 master 上看到的提交历史吗?还是合并的提交“依赖”仍在分支上的提交?谢谢。
    • @quixoto,您可以安全地删除已合并的分支。如果您在git branch -d feature1 中使用小 d,除非它被安全地合并,否则它将拒绝工作。当您删除分支时,它只是删除指向其最后一次提交的指针。提交本身仍然存在。
    【解决方案2】:

    为了完整起见(我同意 karl Bielefeldtanswer),使用 rebase 的解决方案是:

    git checkout feature2
    git rebase feature1
    git checkout master
    git rebase --onto feature2 B D
    

    See heregit rebase --onto 为例)

    【讨论】:

      猜你喜欢
      • 2023-01-30
      • 2013-12-05
      • 2021-01-12
      • 2017-02-26
      • 1970-01-01
      • 2017-08-14
      • 2016-03-20
      • 2013-06-02
      • 1970-01-01
      相关资源
      最近更新 更多