mga*_*abe 8 git merge bitbucket
我对 git 相当陌生,只能自己工作,所以我没有使用它可以做的许多功能,但我遇到了一个过程,要么我想错了,要么做错了什么。
我有一个带有 1 个提交(初始化)的主分支。
我有一个有 180 个提交的开发分支。
今天我终于准备好将 develop 分支合并到 master 分支,我读了一些书,发现了关于壁球的知识。这似乎很有用,因为我不会使用开发分支中相同的 WIP 提交来污染 master 分支。
所以我跑了
git checkout master
git merge --squash develop
git commit
Run Code Online (Sandbox Code Playgroud)
从这里一切看起来都符合我的预期,master
有 2 次提交,develop
仍然有 180 次。在我的脑海中,我现在develop
再次检查并继续工作。我推到bitbucket
并环顾我的项目以查看此合并并注意到以下内容:
1 commit(s) on master and not on develop
179 commit(s) on develop and not on master
Run Code Online (Sandbox Code Playgroud)
这只是预期的行为,我应该忽略它还是我做错了什么。
这是意料之中的,因为 git 将您的所有提交合并为一个提交,与您的开发分支中的提交相比,这将是不同的。将提交视为一组更改的容器,如果您更改内容,您将拥有不同的内容。
您要么必须接受这种情况,要么可以通过在功能分支中工作来调整您的工作流程,例如主 - 开发 - 功能分支。
一旦功能完成,您就可以从功能分支进行挤压合并以开发和删除功能分支。现在您可以在没有所有 WIP 提交的情况下进行从开发到母版的合并,例如,当您发布新版本等时。
小智 5
从git merge --help
:
请注意,快进更新不会创建合并提交,因此无法停止这些合并
--no-commit
。因此,如果您想确保合并命令不会更改或更新您的分支,请使用--no-ff
with--no-commit
。
这也解释了为什么@josemigallas 的建议还不够。
因此你可以这样做:
git switch master
git merge dev --no-ff --no-commit
Run Code Online (Sandbox Code Playgroud)
这将正确合并两个分支的历史记录(请参阅 参考资料git log --graph
),并在 master 分支上提供一次额外的提交(而不是全部 180 次)。