Gerrit和特性分支

3

我开始在连接到Gerrit的代码库中使用特性分支,但是在更新这些特性分支时遇到了一些问题。

我们所做的是从主分支创建一个特性分支。当我们在特性分支上进行开发时,主分支上也在持续开发。有没有最佳实践来更新特性分支和主分支(如果有)?

  1. 变基 -> 如果我们从主分支进行变基并推送它,则需要在特性分支中重新审查从主分支中的所有提交。
  2. 合并 -> 不允许推送合并提交。
3个回答

2
如果我理解正确,您在Gerrit上有一个功能分支,是吗?我的意思是,您不仅仅是在本地功能分支上工作,对吧?如果是这样的话,您不能选择第一种选项(rebase),对于您的问题的答案是:2.合并。
您还说不允许将合并提交推送到Gerrit,因此,如果您真的想使用主分支更新功能分支,您需要向Gerrit管理员请求授予您(和/或其他人)权限,以便只能将合并提交推送到这个特定的功能分支。

1
将功能分支与主分支合并并将该合并推送到gerrit,非常方便,因此如果可能的话,您应该考虑为gerrit中的主分支和其他分支设置不同的规则。
总的来说,我认为在定期提升的分支上不允许合并提交没有太多意义。为什么不想在提交历史中展示功能开发的这个方面呢?但是绝对同意不允许在主分支上合并。它们不会添加有关开发过程的有价值信息。它们只会使事情的顺序更难以看清。

1
有人能否解释一下如何配置Gerrit以允许将合并提交推送到功能分支,但永远不会推送到主分支?一旦功能分支上的工作完成,如果无法将合并推送到主分支,应该如何将代码移动到主分支? - chrisinmtown
你可以通过将特性分支与主分支使用 git merge --squash 命令合并,并将其推送到主分支来移动代码。 - Martin G

0

首先,我们不应该在主分支上进行开发,如果有紧急情况,我们应该创建一个热修复分支并用于开发。 其次,Rebase始终是保持功能分支更新的首选选项,但整个团队必须执行“rebase”而不是“merge”,以保持提交历史记录清洁。 最后,正如您所说,rebase和merge无法帮助您,因此您可以使用命令“git merge --squash”,此命令将获取所有新提交,组合并创建一个提交更改ID。尽管可能需要手动处理冲突。下面是操作过程:

  1. git checkout master
  2. git pull
  3. git checkout feature_branch
  4. git pull
  5. git merge --squash master
  6. git add .
  7. git commit -m“commit_message” // 在IDE中解决所有冲突。
  8. git push

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接