Azure Devops 比较 PR 显示压缩合并后的文件旧状态
Azure Devops compare PR shows the file old status after a squash merge
我的分支和 PR 发生了一些奇怪的事情。所以基本上我已经将一个特性分支合并到我的主分支中,但我忘记删除特性分支。几天后,我发现功能分支仍在远程。我记得我已将其合并到主文件中,但我想确保没有未合并的更改,因此我创建了比较 PR 以查看差异。然后突然间它显示许多文件已更改,这些文件已经在 main 中。
奇怪的是 PR 在 main 上显示文件的旧状态。例如;下面绿色突出显示的版本已经是主要版本。所以 main 有这个 nugets 3.1.20 版本
这里是 main
的 SS
其他文件也是如此。那么,如果我第二次创建,为什么这个 PR 会显示文件的旧版本?所以它实际上没有正确比较?
我知道较旧的提交可以按规定显示 ,不确定是否是同一个问题,但为什么文件更改或差异在进行第二次 PR 时应该有所不同?
if it is the same issue but why file changes or differences should be different doing a second PR?
是的,你是对的。这是同样的问题。
这是因为 squash merge 合并的特定方式。正如 Hugh 所说“Squash 合并允许您压缩主题分支的提交并将它们添加到默认分支上的单个 新提交。”
它与常规merge的区别在于它不会将分支中包含的所有commit都提交到目标分支,而是创建一个新的commit代表一个commit当前 PR.
例如:
普通公关:
壁球合并:
我们在做PR的时候,比较源分支和目标分支的时候,根据两个分支上的commit记录来判断文件的差异,不是文件本身的区别。这样,当我们用squash merge合并PR的时候,那些旧的commit并没有合并到目标分支,所以比较文件的时候,还是会显示旧的改动。
这就是为什么PR在第二次创建时显示旧版本文件的原因。
我的分支和 PR 发生了一些奇怪的事情。所以基本上我已经将一个特性分支合并到我的主分支中,但我忘记删除特性分支。几天后,我发现功能分支仍在远程。我记得我已将其合并到主文件中,但我想确保没有未合并的更改,因此我创建了比较 PR 以查看差异。然后突然间它显示许多文件已更改,这些文件已经在 main 中。 奇怪的是 PR 在 main 上显示文件的旧状态。例如;下面绿色突出显示的版本已经是主要版本。所以 main 有这个 nugets 3.1.20 版本
这里是 main
的 SS其他文件也是如此。那么,如果我第二次创建,为什么这个 PR 会显示文件的旧版本?所以它实际上没有正确比较?
我知道较旧的提交可以按规定显示
if it is the same issue but why file changes or differences should be different doing a second PR?
是的,你是对的。这是同样的问题。
这是因为 squash merge 合并的特定方式。正如 Hugh 所说“Squash 合并允许您压缩主题分支的提交并将它们添加到默认分支上的单个 新提交。”
它与常规merge的区别在于它不会将分支中包含的所有commit都提交到目标分支,而是创建一个新的commit代表一个commit当前 PR.
例如:
普通公关:
壁球合并:
我们在做PR的时候,比较源分支和目标分支的时候,根据两个分支上的commit记录来判断文件的差异,不是文件本身的区别。这样,当我们用squash merge合并PR的时候,那些旧的commit并没有合并到目标分支,所以比较文件的时候,还是会显示旧的改动。
这就是为什么PR在第二次创建时显示旧版本文件的原因。