在 GitHub 中合并+压缩 PR 后如何同步你的 git dev 分支?
How to sync up your git dev branch after you've merged+squashed a PR to master, in GitHub?
因此 GitHub has the ability to merge+squash commits 获得 PR。
我们遵循 dev
-> master
.
PR 代码的过程
以前,我只是 'merging' PR,但这会生成一个新的提交,上面写着:“Merge Pull Request #1 from foo/bar
”。 :( 呜...
所以我想我可以试试 GH 的新 Squash Commits
东西。这创建了一个新的提交,我之前的所有提交都被压缩了。好的,到目前为止一切顺利。
我 然后 回到我的 dev
分支(在我的开发机器上).. 下拉 upstream/master
(这是 PR 和 squash 的地方-merge happened)) 现在它 添加了另一个 提交到我的本地历史记录!它没有 "Oh .. wow. you're waaay out of line .. lets sync up"。它只是进行了合并。
所以 Squash+Merge 按钮压缩了 4 次提交并将其替换为 1 ...
我本地主机上的 pull upstream/master
现在我的 4 次提交仍然存在,并且 PR 所做的 Squashed-commit 和一个新的提交,即“Merge branch master .. blah ... noise ..spam
” commit :( :( :(
有什么特殊的 trick/workflow 我应该在 发生合并挤压后.. 以确保我的 dev
分支正确同步吗?就像.. 是否每个人都在将 upstream/master
拉回到他们的本地主机并进入(新创建的)dev
分支之前删除他们的本地主机 dev
分支?
记住:这里的目标是避免那些蹩脚的 "Merge Pull Request #2.." merge bubble 消息。
或者人们暂时只是通过 CLI 执行此操作,直到 GitHub 学会如何执行此操作:(
有一个更好的解决方案可以合并和压缩您的提交,而无需额外的提交说 "Merge Foo branch in Bar" 。你应该总是更喜欢变基而不是合并然后压缩。因此 rebase 将帮助您合并两个分支而无需任何额外的提交。您应该尝试重新设置分支而不是合并。这里是同here的详细解释。
如果您的 dev
分支被合并和压缩,那么您就不再需要它了。只需将其重置为 upstream/master
.
如果有一些较新的更改,您可以改为调用 git rebase -i upstream/master
并删除所有已合并的提交,重新设置其余部分。
我认为问题出在你的工作流程上:通常一旦你合并了一个拉取请求(无论你使用哪种方法),你就完成了那个分支。如果你想做进一步的改变,你最好从当前 upstream/master 创建一个新的功能分支,稍后你可以打开另一个拉取请求将它合并回来。
如果你真的想坚持一个长期存在的分支来进行所有开发(你称之为 dev 的分支),你必须遵守一些注意事项头脑:
- 如果您不是唯一在该分支上工作的人,则必须避免任何类型的历史重写。没有变基,没有压缩,没有重置,甚至没有修改提交。这基本上排除了使用 squash merge 的可能性。
- 如果你确定你是唯一一个在该分支上工作的人,并且你使用 GitHub 的压缩选项像你一样合并拉取请求,那么 你必须重置你的本地dev 分支到最新的 upstream/master,然后再在那里继续工作 。这也意味着稍后您将需要强制推送到上游以创建新的拉取请求。
最后一点容易出错,会影响之前的代码审查,所以我个人会选择只使用短暂的特性分支。
因此 GitHub has the ability to merge+squash commits 获得 PR。
我们遵循 dev
-> master
.
以前,我只是 'merging' PR,但这会生成一个新的提交,上面写着:“Merge Pull Request #1 from foo/bar
”。 :( 呜...
所以我想我可以试试 GH 的新 Squash Commits
东西。这创建了一个新的提交,我之前的所有提交都被压缩了。好的,到目前为止一切顺利。
我 然后 回到我的 dev
分支(在我的开发机器上).. 下拉 upstream/master
(这是 PR 和 squash 的地方-merge happened)) 现在它 添加了另一个 提交到我的本地历史记录!它没有 "Oh .. wow. you're waaay out of line .. lets sync up"。它只是进行了合并。
所以 Squash+Merge 按钮压缩了 4 次提交并将其替换为 1 ...
我本地主机上的 pull upstream/master
现在我的 4 次提交仍然存在,并且 PR 所做的 Squashed-commit 和一个新的提交,即“Merge branch master .. blah ... noise ..spam
” commit :( :( :(
有什么特殊的 trick/workflow 我应该在 发生合并挤压后.. 以确保我的 dev
分支正确同步吗?就像.. 是否每个人都在将 upstream/master
拉回到他们的本地主机并进入(新创建的)dev
分支之前删除他们的本地主机 dev
分支?
记住:这里的目标是避免那些蹩脚的 "Merge Pull Request #2.." merge bubble 消息。
或者人们暂时只是通过 CLI 执行此操作,直到 GitHub 学会如何执行此操作:(
有一个更好的解决方案可以合并和压缩您的提交,而无需额外的提交说 "Merge Foo branch in Bar" 。你应该总是更喜欢变基而不是合并然后压缩。因此 rebase 将帮助您合并两个分支而无需任何额外的提交。您应该尝试重新设置分支而不是合并。这里是同here的详细解释。
如果您的 dev
分支被合并和压缩,那么您就不再需要它了。只需将其重置为 upstream/master
.
如果有一些较新的更改,您可以改为调用 git rebase -i upstream/master
并删除所有已合并的提交,重新设置其余部分。
我认为问题出在你的工作流程上:通常一旦你合并了一个拉取请求(无论你使用哪种方法),你就完成了那个分支。如果你想做进一步的改变,你最好从当前 upstream/master 创建一个新的功能分支,稍后你可以打开另一个拉取请求将它合并回来。
如果你真的想坚持一个长期存在的分支来进行所有开发(你称之为 dev 的分支),你必须遵守一些注意事项头脑:
- 如果您不是唯一在该分支上工作的人,则必须避免任何类型的历史重写。没有变基,没有压缩,没有重置,甚至没有修改提交。这基本上排除了使用 squash merge 的可能性。
- 如果你确定你是唯一一个在该分支上工作的人,并且你使用 GitHub 的压缩选项像你一样合并拉取请求,那么 你必须重置你的本地dev 分支到最新的 upstream/master,然后再在那里继续工作 。这也意味着稍后您将需要强制推送到上游以创建新的拉取请求。
最后一点容易出错,会影响之前的代码审查,所以我个人会选择只使用短暂的特性分支。