【问题标题】:Azure Devops Git Squash-Commit Issue fake commitsAzure Devops Git Squash-Commit 问题虚假提交
【发布时间】:2021-08-12 14:04:33
【问题描述】:

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

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

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

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

问候

【问题讨论】:

  • 这能回答你的问题吗? Git merge conflicts during PRs
  • “我们有什么遗漏吗?或者做错了什么?”显然是的。壁球合并不是合并!所以合并基础永远不会移动,PR 变得越来越长,冲突很容易出现并且变得越来越糟。你选择了错误的策略。

标签: git azure-devops git-commit git-squash


【解决方案1】:

在 PR 的文件比较中,它不仅比较源分支和目标分支之间的文件更改。它将比较它们之间的提交历史记录。

如果您多次使用 squash 合并将更改从一个分支合并到另一个分支,这是正确的行为。因为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 合并时,你应该删除源分支。并且下次如果还想使用 squash 合并,可以在目标分支的基础上新建一个源分支(仍然可以使用相同的分支名称feature)。然后在新的源分支上进行更改,使用 squash merge 将更改合并到目标分支,删除源分支。

如果您在使用 squash 合并时没有删除源分支,并且在下次您继续从该源分支进行更改并将其合并到目标分支时,您可能会遇到一些冲突和额外的更改,就像您遇到的问题一样面对。

此时,如果有冲突,解决冲突后就可以照常完成合并了。如果没有冲突,您可以像往常一样直接完成合并。完成合并后,别忘了删除源分支。

要查看更多详细信息,您可以查看“Squash merge pull requests”。

【讨论】:

    猜你喜欢
    • 2013-03-01
    • 2016-12-25
    • 2016-12-30
    • 2014-03-11
    • 2012-03-24
    • 2016-09-04
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多