【发布时间】:2016-11-28 07:56:46
【问题描述】:
所以请到 GitHub has the ability to merge+squash commits 申请 PR。
我们按照dev->master的PR'ing代码流程。
以前,我一直在“合并” PR,但这会生成一个新的提交,上面写着:“Merge Pull Request #1 from foo/bar”。 :( 呜呜……
所以我想我可以试试 GH 的新 Squash Commits 东西。这创建了一个新的提交,我之前的所有提交都被压缩了。好的,到目前为止一切顺利。
我然后回到我的dev 分支(在我的开发人员机器上).. 拉下upstream/master(这是 PR 和 squash-merge 发生的地方))现在 添加了另一个提交到我的本地历史!它没有去“哦..哇。你太不合时宜了..让我们同步”。它只是做了一个合并。
所以 Squash+Merge 按钮压缩了 4 个提交并将其替换为 1 ...
我的 localhost 机器上的 pull upstream/master 现在仍然有我的 4 个提交,PR 所做的 Squashed-commit 和一个新的提交,即“Merge branch master .. blah ... noise ..spam”提交 :( :( :(
在发生合并挤压之后,我应该做一个特殊的技巧/工作流程吗.. 以确保我的 dev 分支正确同步?就像 .. 每个人都只是删除他们的 localhost dev 分支,然后再将 upstream/master 拉回他们的 localhost 并进入(新创建的)dev 分支吗?
记住:这里的目标是避免那些蹩脚的“Merge Pull Request #2..”merge bubble 消息。
或者人们暂时只是通过 CLI 执行此操作,直到 GitHub 学会如何执行此操作:(
【问题讨论】:
-
最简单的选择是从 master 创建一个独特的功能分支,并在 CI 通过时将合并回 master。然后删除分支。
-
实际上,整个“rebase 而不是merge”的想法是相当具有误导性的。合并的历史是正确的。它具有该功能的开发历史,希望包含有关更改原因的信息。它具有合并提交,显示功能何时合并。 Rebased 或 merge-squashed 分支不会以任何方式链接到原始分支,因此会丢失重要信息。如果您不喜欢
git log或 UI 显示合并历史的方式,那么您应该修复那个。例如使用选项--first-parent
标签: git github merge git-squash