So GitHub has the ability to merge+squash commits用于公关。
我们遵循从 dev
-> master
PR 代码的过程。
以前,我一直只是“merge ”PR,但这会生成一个新的提交,上面写着:“Merge Pull Request #1 from foo/bar
”。 :( 呜...
所以我想我可以尝试使用 GH 的新 Squash Commits
东西。这创建了一个新的提交,我之前的所有提交都被压缩了。好的,到目前为止一切顺利。
我然后回到我的dev
分支(在我的开发机器上).. pull 下upstream/master
(这是PR 和 squash-merge 发生了))现在它添加了另一个提交到我的本地历史!它没有去“哦..哇。你waaay越线..让同步起来”。它只是进行了 merge 。
所以 Squash+Merge 按钮压缩了 4 次提交并将其替换为 1 ...
在我的本地主机上 pull upstream/master
现在我的 4 次提交仍然存在,而且 PR 做了 Squashed-commit 和一个新的提交,即“Merge branch master .. blah ...噪音..垃圾邮件
”提交:( :( :(
在 merge 压缩发生后,我应该做一个特殊的技巧/工作流程.. 以确保我的 dev
分支正确同步吗?就像 .. 每个人都只是删除他们的本地主机 dev
分支,然后再将 upstream/master
pull 回到他们的本地主机并进入(新创建的)dev
分支?
记住:这里的目标是避免那些蹩脚的“Merge Pull Request #2..”merge bubble消息。
或者人们暂时只是通过 CLI 来执行此操作,直到 GitHub 学习如何执行此操作:(
最佳答案
我认为问题出在您的工作流程上:通常一旦您 merge 了一个 pull 请求(无论您使用哪种方法),您就完成了该分支。如果您想做进一步的更改,您最好从当前的 upstream/master 创建一个新的功能分支,稍后您可以打开另一个 pull 请求以将其 merge 回来。
如果您真的想为所有开发坚持一个长期存在的分支(您称为 dev 的分支),您必须牢记一些注意事项:
- 如果您不是唯一在该分支工作的人,则必须避免任何类型的历史重写。没有 rebase ,没有压缩,没有重置,甚至没有修改提交。这基本上排除了使用 squash merge 的可能性。
- 如果您确定您是唯一一个在该分支上工作的人,并且您使用 GitHub 的压缩选项像您一样 merge pull 请求,那么您必须将本地 dev 分支重置为latest upstream/master 在恢复你的工作之前。这也意味着稍后您将需要强制推送到上游以创建新的 pull 请求。
最后一点容易出错,会影响之前的代码审查,所以我个人会选择只使用短暂的特性分支。
关于git - 在 GitHub 中将 PR merge +压缩到 master 之后如何同步你的 git dev 分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38559882/