2013-07-22 61 views
5

我想将单个提交推送到Gerrit,而不影响同一主题分支中的其他提交。不幸的是,我没有Gerrit的测试实例进行试验。Gerrit工作流 - 将单个提交推送到主题分支

场景: 我已经为该项目贡献了一个主题分支,该项目正在审核中,其他开发人员已更新其部分内容。现在我希望对他们的更新进行更改。

要做到这一点,我要提交其他开发人员在我希望编辑的提交中进行的更改,在本地进行交互式重新分页以进行自己的更改,然后推送给Gerrit,确保Change-Id仍然相同。这会将该文件的新版本添加到补丁集以供审阅。

问题: 当我试图把单一的承诺格里特,在主题分支对方提交也被推,覆盖其他开发人员的变化。

这里是我使用的语法:

git push gerrit 3089c9f56542461dce738a9aa17bb743ed36e038:refs/publish/master/my-topic-branch 

我相信,在主题分支的其他提交也被推因为格里特产生依赖。

请问这种方式工作,而不是,留出了问题分支标题?:

git push gerrit 3089c9f56542461dce738a9aa17bb743ed36e038:refs/publish/master 

我试过这种方法成功之前,推到具体变更:

git push gerrit a95cc0dcd7a8fd3e70b1243aa466a96de08ae731:refs/changes/12345 

然而,在尝试这种再次我现在得到一个解压错误:

error: unpack failed: error Missing tree 9172313b907b160d15e260d5f7d51689f467b858 

相关问题: 当我从Gerrit中抽取其他开发人员的更改时,如何确保已将所有在主题分支中提供的文件都拉出来?如果我在主题分支中选择Gerrit中最顶层的更改,并使用web ui中声明的pull命令,则主题分支中的某些文件似乎在本地更新,但并非全部更新。我是否需要通过主题分支中的每个提交并发出相关的pull命令?

+0

看看也许我没有正确地理解你的问题。你说你已经“拉动了他们的改变(或者提交)并且互动地改变了他们”......在你提到的问题中“主题分支中的其他提交也被推送了”......因为这些改变已经存在......为什么会你担心?还是你的意思是你的其他改变被推? – Vikram

+0

问题是,当我从该特定提交(这是我想要编辑的唯一一个提交)中提取更改时,并非我所有的本地文件(即该主题分支的一部分)都被更新。请参阅“相关问题”部分。因此,当我推送已更改的提交,并且主题分支中的其他提交也被推送时,它们通常比Gerrit上的当前更早,并覆盖其他开发人员所做的更改。 – Lemmy

+0

关于“相关问题”部分:要确保您是否拉取了主题分支提供的所有文件,请从第一个“patchset 1”或“patchset n”开始,如果您确定具有所需的所有文件。做一个'git pull --rebase refs/changes /#/#/ patch#'从下一个补丁开始,直到最近的补丁集。重新绑定所有补丁后,对压缩提交很重要。奇怪的'git状态'可能会或可能不会显示任何本地提交。 – Vikram

回答

1

我不知道手的命令,但它会是这样的:

  1. 使主题分支的新分支
  2. 合并要添加到主题分支到这个提交新的分支
  3. 推新创建的合并到格里特
相关问题