Git:创建一个依赖于其他Gerrit更改的提交?

时间:2014-01-23 19:27:23

标签: git gerrit

在我的工作地点,我们使用Gerrit服务器进行代码审查。通常,不同的人会创作不相关的提交。我遇到了一个问题,我必须创建一个依赖于另外两个不相关的提交的提交。

假设gerrit服务器上有两个提交:

  • 提交A:“添加函数flipImage”
  • 提交B:“添加函数rotateImage”

这两者是相互独立的。我的工作是实现Commit C:“添加函数flipRotateImage”。这需要提交A和B两者。

我有两个问题:

  1. 如何以这种方式'拉入'A和B,然后是作者C' 我实际上并没有改变A或B?换句话说,我做不到 樱桃挑选A或B,因为它会改变它们。我的目标是成为 能够上传C进行审核而无需更新A&乙
  2. 让我们 说A的作者上传了一个新的补丁集。我想更新我的 工作分支,使我的链中的“A”是最新的“A”,而不是 一个较旧的补丁集。可以这样做吗?

3 个答案:

答案 0 :(得分:3)

  1. 除非A或B被重新依赖于另一个,否则你不能让C依赖于A和B.一种可能性是检查A并从B合并以创建一个合并提交D,你可以放在其上C,但是你必须上传这个无用的合并提交以供审查,但是图形方面它是使A和B都可以从C到达而不使B可以从B到达的唯一方法,反之亦然。
  2. 是的,使用Gerrit UI中提供的URL将新的A提取到您的工作区中,并使用例如将C放在其上面。 git rebase --onto。确切的过程在很大程度上取决于您在第一个问题中如何选择处理问题,但忽略了这一点并假设您已经检查了C的主题分支,那么git rebase --onto newA oldA将会这样做。

答案 1 :(得分:2)

Gerrit已经提议在git DAG之外支持这种依赖规范。此更改旨在用于跨项目依赖项,但它也应支持此类项目内提交依赖项。对不起,它现在对你没有帮助。

https://gerrit-review.googlesource.com/#/c/55243

答案 2 :(得分:0)

1)实际上你可以从A开始并合并B,然后将你的更改作为合并提交的修正。如果更改足够独立,您甚至可以合并两个以上。 (章鱼合并

2)这很棘手。重新定位是不够的 - 有一个原因是没有人在谈论章鱼变种,而git-rebase只会尝试重新绑定到一个父亲身上。但我想你可以创建一个合并,重新绑定到它,然后压缩合并提交和你的提交。

我在实践中没有尝试过任何这个,它可能很不稳定,但我想确保有人提到它。 技术上这是可行的。