【问题标题】:Predicting merge conflicts between feature branches when they are merged in the master branch预测功能分支在主分支中合并时的合并冲突
【发布时间】:2020-04-24 06:19:08
【问题描述】:

假设我有一个主分支和 3 个功能分支。在 sprint 结束时,所有这些功能都已准备就绪,我想将它们全部合并到 master。

merge feature1 into master => OK
merge feature2 into master => OK
merge feature3 into master => CONFLICTS!

没有向 master 添加任何提交,但仍然存在合并冲突,因为 feature3 与 feature1 和/或 feature2 冲突。

是否有工具可以预测这种合并冲突(查看哪些功能分支会产生合并冲突)?如果我能预测到这一点,我可以只将 feature1 和 feature3 合并到 master 分支中。

谢谢!

【问题讨论】:

    标签: git merge


    【解决方案1】:

    预测合并冲突的方法是进行合并。1使用临时分支来执行此操作:

    git checkout -b test master
    git merge feature1
    git merge feature2
    git merge feature3
    

    如果一切顺利,则合并工作。现在,如果您愿意,可以使用这个最终合并作为master 本身的结果,方法是执行快进 操作以将master 向上移动以匹配test

    git checkout master
    git merge --ff-only test   # --ff-only means "fail if fast-forward is not possible"
    

    或者干脆delete分支test如果你不想这样做和/或合并失败。如果合并失败,请使用 git merge --abort 退出它,如脚注 1 或 git reset --hard(执行相同操作)。然后使用git checkout mastergit branch -D test

    git merge --abort          # if needed
    git checkout master
    git branch -D test
    

    在上面使用单独的test 分支的唯一原因是避免在我们完成所有三个合并之前移动master。但是由于分支名称对于每个存储库都是私有的,因此没有任何要求来执行此操作:您可以只进行合并,然后回滚(使用git reset --hard)到以前的状态,如果你不这样做'不喜欢结果。只是不要git push 提交,或者将它们提供给git fetch,直到你得到你喜欢的结果。


    1您可以在不提交的情况下进行测试合并,如果您愿意,可以使用git merge --abort 假装您从未运行过测试。但是,当您需要进行多次合并时,这不起作用,就像您的问题一样。


    八达通合并

    不过,还有另一个选项,Git 称之为 octopus merges。 (注意:您不能使用 GitHub 执行这些操作,并且可能无法使用其他一些 Web 界面。)要进行一次将所有三个功能组合到 master 的章鱼合并:

    git checkout master
    git merge feature1 feature2 feature3
    

    如果有任何冲突,章鱼合并将失败。

    (我从未在实际工作中真正使用过章鱼合并。它们无法实现常规合并无法做到的任何事情,而且人们觉得它们令人困惑,所以我倾向于坚持使用常规合并。)

    【讨论】:

      猜你喜欢
      • 2019-01-10
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 2017-07-13
      • 2014-11-27
      • 2018-03-03
      • 1970-01-01
      相关资源
      最近更新 更多