Azure Devops Git Squash-Commit 问题假提交

Azure Devops Git Squash-Commit Issue fake commits

我公司目前正在使用 Azure Cloud,使用 Azure Devops 和 Git 管理我们的代码存储库。

几个月来,当我们想通过合并请求将我们的功能分支合并到我们的开发分支时,我们决定使用 Squash 提交。

从那时起,我们在合并文件时遇到了很大的问题,因为在文件更新部分我们可以看到列出了数千个文件更新。他们中的大多数已经提交给我们的开发分支,所以他们是假的,他们只会引起很多关于再次提交它们可能产生的影响的担忧。

为什么 git 将这些文件识别为已更改(新)?有什么我们想念的吗?还是做错了?

此致

在一个PR的文件比较中,不只是比较源分支和目标分支的文件变化。它将比较它们之间的提交历史。

如果您多次使用 squash merge 将更改从一个分支合并到另一个分支,这是正确的行为。因为instead of each commit on the topic branch being added to the history of the default branch, a squash merge takes all the file changes and adds them to a single new commit on the default branch.

这意味着当您使用 squash merge 合并 PR 时,只有源分支上的文件更改(feature 将被合并并且在目标分支上生成一个新的提交(develop 在你的例子中)。源分支上这些文件更改的提交历史不会合并到目标分支。

一般在完成squash merge时,应该删除源分支。并且下次如果你还想使用squash merge,你可以基于目标分支。然后在新的源分支上进行更改,使用 squash merge 将更改合并到目标分支,删除源分支。

如果你在使用squash merge时没有删除源分支,下次你继续从这个源分支做修改合并到目标分支,你可能会得到一些冲突和额外的修改,就像您遇到的问题。

此时如果有冲突,解决冲突即可照常完成合并。如果没有冲突,可以照常直接完成合并。完成合并后,不要忘记删除源分支。

查看更多详情,您可以查看“Squash merge pull requests”。