【问题标题】:Merging with another feature branch before rebasing to Master in Git在 Git 中变基为 Master 之前与另一个功能分支合并
【发布时间】:2019-01-31 07:19:21
【问题描述】:

所以我试图了解 Git 如何处理某些进程以及一些已经使用的做法。

假设我们有一个 Git 存储库,其中有一个名为 master 的分支。我们还有两个从master 同时创建的分支。我们称他们为branch_onebranch_two

branch_one 已经完成了特定功能的工作。我目前正在branch_two 上开发。为了便于讨论,假设我无法将 branch_one 合并到 master,因为它正在等待其他开发者的批准。

问题来了:

我需要 branch_one 的所有工作才能继续 branch_two 的工作。

这是我目前的流程:

1) 将branch_one 合并到branch_two
2) 在branch_two 上工作。
3) 在提交拉取请求之前,将branch_twomaster 变基。

呃-哦。变基在 30 多个补丁上存在冲突。我认为这是因为合并(步骤 1)改变了branch_two 的头部。我可能假设不正确。

显然,我希望在我的版本控制过程中避免大规模的冲突解决步骤。

所以我的问题:

有没有更好的方法来处理这种类型的过程,其中一个特性分支需要另一个特性分支的更改,而不包括大量冲突?

【问题讨论】:

    标签: git version-control rebase branching-and-merging


    【解决方案1】:

    您需要一个由主 HEAD 制成的集成分支:

    • 在集成中合并 branch1
    • 在集成之上重新设置分支 2。

    如果 branch1 在其验证的上下文中需要额外的工作,请再次在集成中合并新的 branch1 提交。
    在某个时候,branch1 将被合并到 master 中。

    然后,每当您要验证 branch2 时,首先将其重新设置在更新的集成分支之上。然后将其合并到集成中(使用--no-ff:没有快进合并)。

    最后,准备好后将 branch2 合并到 master。那里没有冲突。

    有关此工作流程的更多信息,see gitworkflow(远胜于Gitflow

    【讨论】:

    • 为什么这个答案被否决了?这对我来说似乎是正确的。
    • 当然,您永远不会将集成合并到任何功能分支。理想情况下,合并流只有一种方式。这样,您就可以保持集成和功能分支的轻度耦合:一个简单的 git revert 就足以从集成中删除一个功能。
    • @VonC 要清楚,当您说“在集成之上重新设置分支 2”时,这意味着 git rebase integration,对吗?
    • @Frank 是的,这就是变基的完成方式:“在”
    【解决方案2】:

    您在 GIT 中遇到了一个常见的陷阱。解决方案始终是,提前考虑。在您的场景中,提前知道您是否需要来自一个分支的功能将使您能够以一种避免此问题的方式进行分支:

    从master创建一个分支,这将是一个史诗分支

    git checkout -b epicBranch

    epicBranch 之外创建branch_onebranch_two

    git checkout -b branch_one git checkout -b branch_two

    一旦您需要 branch_one 的功能,您 PR 并将 branch_one 合并到 epicBranch 然后将epicBranch 合并为branch_two

    git checkout branch_two
    git merge epicBranch
    

    现在您可以从branch_one 更改为branch_two,而无需关闭分支的开销。

    您将拥有提交历史记录,并且在合并或变基时不应遇到任何问题。

    您还可以通过将所需的功能提交挑选到可以在分支之间共享的自己的分支中来省去很多麻烦。

    【讨论】:

    • 感谢您的回复。不幸的是,上面提出的场景是由于某种原因我不能先合并 branch_one。
    猜你喜欢
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    相关资源
    最近更新 更多