如何执行一个分支到另一个分支的零星合并
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.2
将 dev
合并到 stable
时,stable
中的相同文件发生了变化不在 dev
上(来自压扁的合并提交)以及 dev
中不在 stable
上的更改(新更改以及从 feature_1
到 4 的更改,因为这些 提交 不是 stable
历史的一部分,所以只引入了更改)。
我认为最好的解决方案是在将 dev
合并到 stable
时不要压缩这些更改。您也可以通过将 stable
合并到 dev
或将 dev
变基到 stable
来解决此问题,但这会使事情变得更加混乱。
哈希不必相同;在暂存上部署修补程序而不是将它们用于开发是没有问题的(从 git 的角度来看。就干净的工作流程而言,修复某些东西至少是有问题的 而不是 把它合并回去开发)。
我在一个分支 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.2
将 dev
合并到 stable
时,stable
中的相同文件发生了变化不在 dev
上(来自压扁的合并提交)以及 dev
中不在 stable
上的更改(新更改以及从 feature_1
到 4 的更改,因为这些 提交 不是 stable
历史的一部分,所以只引入了更改)。
我认为最好的解决方案是在将 dev
合并到 stable
时不要压缩这些更改。您也可以通过将 stable
合并到 dev
或将 dev
变基到 stable
来解决此问题,但这会使事情变得更加混乱。
哈希不必相同;在暂存上部署修补程序而不是将它们用于开发是没有问题的(从 git 的角度来看。就干净的工作流程而言,修复某些东西至少是有问题的 而不是 把它合并回去开发)。