git - 如何正确使用 git merge --squash

标签 git merge bitbucket

我是 git 的新手,只能自己工作,所以我没有使用它可以做的许多功能,但我遇到了一个过程,要么我想错了,要么做错了。

我有一个带有 1 次提交(初始化)的主分支。

我有一个包含 180 个提交的开发分支。

今天我终于准备好将 develop 分支 merge 到 master 中,我做了一些阅读并了解了 squash。这看起来很有用,因为我不会用 develop 分支中相同的 WIP 提交污染 master 分支。

所以我跑了

git checkout master
git merge --squash develop
git commit

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

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

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

最佳答案

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

您要么必须接受这种情况,要么可以通过在功能分支中工作来调整您的工作流程,例如master - develop - feature-branch.

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

关于git - 如何正确使用 git merge --squash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36437912/

相关文章:

python - 合并 pandas 中的 2 个数据框

git - 错误 merge 后修复 Git 仓库

bitbucket - 如何更改 BitBucket 中的开发分支?

git - 如何在 github 提交中设置用户名别名?

git - 如何使用 git/AWS CLI 管理 AWS Lambda 代码?

git - 来自私有(private) git 存储库的 Golang 和依赖项

ruby-on-rails - 在 Windows 中开发 Ruby 和 Rails?或 Linux 虚拟机

python - 迭代地将第一列中的文本与其他列中的现有文本组合

ruby-on-rails - 为什么有时会得到 `lock' : deadlock detected (fatal) error?

git - 如何使用 .gitignore 在 git 中只包含特定文件夹?