如何正确使用 git merge --squash

How to properly use git merge --squash

我是 git 的新手,只能自己工作,所以我没有使用它可以做的许多功能,但我 运行 进入了一个我正在考虑的过程关于错误或做错了什么。

我有一个 master b运行ch 有 1 次提交(初始化)。

我有一个 develop b运行ch 有 180 次提交。

今天我终于准备好将 develop b运行ch 合并到 master 中了,我做了一些阅读并了解了有关 squash 的知识。这看起来很有用,因为我不会用开发 b运行ch.

中相同的 WIP 提交污染主 b运行ch

所以我运行

git checkout master
git merge --squash develop
git commit

从这里开始,一切看起来都符合我的预期,master 有 2 次提交,develop 仍然有 180 次。在我的脑海中,我现在再次检查 develop 并继续工作。我推到 bitbucket 并环顾我的项目以查看此合并并注意到以下内容:

1 commit(s) on master and not on develop
179 commit(s) on develop and not on master

这是正常的行为吗,我应该忽略它还是我做错了什么。

这是预期的,因为 git 将您的所有提交合并为一个提交,与您的开发分支中的提交相比,这将是一个不同的提交。将提交视为一组更改的容器,如果您更改内容,您将拥有不同的内容。

您要么必须接受这种情况,要么可以通过在功能分支中工作来调整您的工作流程,例如掌握 - 开发 - 功能分支。

完成一个功能后,您可以从功能分支进行压缩合并以开发和删除功能分支。现在您可以在没有所有 WIP 提交的情况下进行从开发到主控的合并,例如当您发布新版本时。

当您压缩 Git 中的提交时,它会将它们合并为一个提交。但是,当您想要将来自多个提交的更改合并为一个新提交时,您可以合并。

在您的情况下,我认为您打算做的是没有 "fastforwarding" 的合并。通过这种合并,您最终将在 master 中有 2 次提交(初始和合并),在 dev 中有 180 次提交。

代码将是(在开发中最后一次提交之后):

git checkout master
git merge dev --no-ff