在GitHub中你合并+压缩PR到master后,如何同步你的git dev分支?

时间:2016-07-25 04:44:42

标签: git github merge git-squash

GitHub has the ability to merge+squash commits为PR。

我们按照来自dev - >的公关代码的流程进行操作master

以前,我只是在合并' PR,但会产生一个新的提交,其中说:" Merge Pull Request #1 from foo/bar"。 :( Boooo ......

所以我想我可能会用GH尝试新的Squash Commits。这创建了一个新的提交,我以前的所有提交都被压缩了。好的,到目前为止一切顺利。

然后回到我的dev分支机构(在我的开发者机器上)..拉下upstream/master(这是PR和壁球合并发生的地方))它现在添加了另一个提交到我的本地历史记录!它没有去#哦;哦......哇。你有点不合适..让我们同步"。它只是合并了。

所以Squash + Merge按钮压缩了4个提交并用1替换它... 我的localhost机器上的pull upstream/master现在仍然有我的4次提交和PR提交的Squashed-commit和一个新的提交,即#34; Merge branch master .. blah ... noise ..spam" commit :( :( :(

在合并壁球发生之后我是否应该做的特殊技巧/工作流程...以确保我的dev分支正确同步' d?喜欢..每个人都会删除他们的localhost dev分支,然后再将upstream/master拉回到他们的localhost并进入(新创建的)dev分支吗?

请记住:这里的目标是避免那些糟糕的" Merge Pull Request#2 .." merge bubble消息。

或者是人们暂时通过CLI执行此操作,直到GitHub了解如何执行此操作:(

3 个答案:

答案 0 :(得分:4)

我认为问题在于您的工作流程:通常一旦合并了拉取请求(无论您使用哪种方法),您就可以完成该分支。如果您想进行进一步的更改,最好从当前的上游/主创建一个新的功能分支,稍后您可以打开另一个请求将其合并回来。

如果你真的想要坚持一个长寿命的分支用于所有开发(你称之为 dev ),那么你需要记住一些注意事项:

  • 如果您不是唯一一个在该分支上工作的人,则必须避免任何历史记录重写。没有变基,没有压扁,没有重置,甚至没有修改提交。这基本上排除了使用squash merge。
  • 如果您确定自己是唯一一个在该分支上工作的人,并且您使用GitHub的壁球选项来合并拉取请求,那么您必须重置本地 dev 在恢复工作之前分支到最新的 upstream / master 。这也意味着稍后您需要强制推送到上游以创建新的拉取请求。

最后一点容易出错并会影响以前的代码审核,所以我个人会选择使用短期功能分支。

答案 1 :(得分:1)

如果您的dev分支合并并被压扁,那么您不再需要它了。只需将其重置为upstream/master

如果有一些较新的更改,您可以调用git rebase -i upstream/master代替并删除所有已合并的提交,然后重新设置其余提交。

答案 2 :(得分:0)

有一个更好的解决方案来合并和压缩你的提交,而无需额外提交“Merge Foo branch in Bar”。你应该总是喜欢变基,而不是合并然后压扁。因此,rebase将帮助您合并两个分支而无需任何额外的提交。你应该尝试重新定义分支而不是合并。以下是同一here的详细说明。