如何执行一个分支到另一个分支的零星合并

How to perform sporadic merging of one branch into another

我在一个分支 dev 上开发,每隔几周就想将当前状态合并到一个分支 staging 中。看来我没有考虑清楚,因为现在我想第二次这样做,我遇到了冲突,因为最后一个共同祖先仍然是我分裂 dev 时的——而第一个在单独的提交中将差异添加到 staging

我在这两种情况下都使用了 gitlab 合并请求,并选中了 squash commits 框。

我的方法是不是天生就错了,我需要改用不同的方法,或者有什么方法可以让它发挥作用吗?


如图:v_0.2 合并失败。我想要做的是精选功能 5-7,我希望 gitlab 能够理解这一点,因为我已经合并了功能 1-4。但事实并非如此。


作为控制台输出:ffc9a2c 是两个分支的最后一个公共父级(显然,那里发生的合并将那个提交正确地作为新父级),之后我开始了我上面描述的合并方案。从那时起,您可以完整地看到 staging。我省略了大部分 dev,因为它真的很长。

git log from staging:
*   5ac9823 Merge branch 'dev' into 'staging'
|\  
| * 50bac27 Code update for v1.rc0.0
|/  
*   5f38284 Merge branch 'dev' into 'staging'
|\  
| *   ffc9a2c Merge branch 'formatting_fix' into 'dev'


git log from dev:
*   176971e Merge branch 'doctest_fix' into 'dev'
|\  
| * 4f0a423 Fix bug for doctest in filters.py
.
.
.
*   945d9ab Merge branch 'return_codes' into 'dev'  # v1.rc0.0 took place here
|\  
| * aed6133 Replace return codes 
.
.
.
|  
*   ffc9a2c Merge branch 'formatting_fix' into 'dev'
|\  
| * 0451416 Improving Error Message Quality

您的问题是 squash commits 框。您没有将提交 feature_1 直接合并到 feature_4,而是合并了一个新的、压缩的提交,它引入了相同的更改。 v_0.2 合并现在有冲突,因为您尝试合并另一个压缩的提交,部分引入相同的更改。

从 git 的角度来看,当您尝试使用 v_0.2dev 合并到 stable 时,stable 中的相同文件发生了变化不在 dev 上(来自压扁的合并提交)以及 dev 中不在 stable 上的更改(新更改以及从 feature_1 到 4 的更改,因为这些 提交 不是 stable 历史的一部分,所以只引入了更改)。

我认为最好的解决方案是在将 dev 合并到 stable 时不要压缩这些更改。您也可以通过将 stable 合并到 dev 或将 dev 变基到 stable 来解决此问题,但这会使事情变得更加混乱。

哈希不必相同;在暂存上部署修补程序而不是将它们用于开发是没有问题的(从 git 的角度来看。就干净的工作流程而言,修复某些东西至少是有问题的 而不是 把它合并回去开发)。