使用 Git 在 Azure DevOps 中出现奇怪的合并行为
Strange merge behavior in Azure DevOps using Git
该企业最近计划在同一个冲刺中测试两个不同的功能,但不确定是否要部署这两个功能。我们的解决方案是在 Develop 之外创建两个功能分支,每个功能一个,在 develop 之外创建第三个分支(“混合分支”),这些功能分支可以合并到其中。我们只会从混合分支部署到 DEV 和 QA,允许开发和 QA 测试这两个功能。如果其中一个被拉回,则单独的功能分支将被合并开发和部署,而没有另一个。
但是我们在合并到混合分支时遇到了其中一个功能分支的一些奇怪行为。
创建拉取请求时,Azure DevOps 会合并从功能分支创建之日起的所有更改。就好像分支在推送后没有正确重新定位一样或合并或你有什么。
对于另一个功能分支,它只提取自上次合并以来推送的提交集。这就是我们期望它的工作方式。
这使得拉取请求的审查变得困难,因为很难隔离 PR 的特定更改。这也意味着必须为每个 PR 重新解决已解决的冲突,并且 PR 的行为就像之前添加或删除的文件需要再次添加或删除。
可能是什么原因造成的,我们该如何解决?
我认为这是因为挤压。 git 的工作方式不是通过跟踪“最后合并的提交指针”。每次合并分支时,git 都会查找存在于一个分支上但不存在于另一个分支上的任何提交。它通过比较哈希值来实现。因此,如果您使用 squash 合并,那么这些提交将合并到具有不同哈希值的另一个分支,因此下一次合并将再次将它们显示为新提交。
关于一个分支正常工作,也许另一个分支被重新定位到第一个?您可以检查提交的哈希值以确保它们在两个分支上确实不同
该企业最近计划在同一个冲刺中测试两个不同的功能,但不确定是否要部署这两个功能。我们的解决方案是在 Develop 之外创建两个功能分支,每个功能一个,在 develop 之外创建第三个分支(“混合分支”),这些功能分支可以合并到其中。我们只会从混合分支部署到 DEV 和 QA,允许开发和 QA 测试这两个功能。如果其中一个被拉回,则单独的功能分支将被合并开发和部署,而没有另一个。
但是我们在合并到混合分支时遇到了其中一个功能分支的一些奇怪行为。
创建拉取请求时,Azure DevOps 会合并从功能分支创建之日起的所有更改。就好像分支在推送后没有正确重新定位一样或合并或你有什么。
对于另一个功能分支,它只提取自上次合并以来推送的提交集。这就是我们期望它的工作方式。
这使得拉取请求的审查变得困难,因为很难隔离 PR 的特定更改。这也意味着必须为每个 PR 重新解决已解决的冲突,并且 PR 的行为就像之前添加或删除的文件需要再次添加或删除。
可能是什么原因造成的,我们该如何解决?
我认为这是因为挤压。 git 的工作方式不是通过跟踪“最后合并的提交指针”。每次合并分支时,git 都会查找存在于一个分支上但不存在于另一个分支上的任何提交。它通过比较哈希值来实现。因此,如果您使用 squash 合并,那么这些提交将合并到具有不同哈希值的另一个分支,因此下一次合并将再次将它们显示为新提交。
关于一个分支正常工作,也许另一个分支被重新定位到第一个?您可以检查提交的哈希值以确保它们在两个分支上确实不同