问题 如果还有第二个较新的评论,如何修改Gerrit中的评论问题


仍在努力学习如何使用Gerrit及其过程。我在哪里做的步骤

  1. 先推 change1 对HEAD进行评论:refs / for / develop
  2. 在同一个分支上处理其他事情并推送 change2 对HEAD进行评论:refs / for / develop

两个提交都有gerrit Change-ID行

所以现在我想解决问题 change1 所以我做了

git checkout -b change1 <change 1's commit id>

做出我的更改并提交(将Change-ID添加到提交消息)

git add .
git commit

现在当我这样做

git push origin HEAD:refs/for/develop

我明白了

 ! [remote rejected] HEAD -> refs/for/develop (squash commits first)
error: failed to push some refs to 'ssh://adrian@192.168.7.100:29418/CommunicationsLibrary'

如何解决堆叠评论中的问题并将其发布到gerrit而无需创建另一个评论?


4571
2017-09-19 02:32


起源

你推到Gerrit的第二个改变是否有你作为依赖推送的第一件事? - xshoppyx
是的它确实将第一个更改作为依赖项 - Adrian Cornish
我今天没有时间尝试这个 - 谢谢你答案会在明天尝试 - 没有忘记它:-) - Adrian Cornish


答案:


如果您在Gerrit中有依赖性评论(也就是说,评审中的一个更改取决于同时审核的早期更改),并且您需要对之前的更改进行修改,则您实际上必须重新提交这两个更改(因为第二次更改取决于不同的“父”提交)

所以情况是你在主开发分支的一个分支中有两个提交,如下所示:

o master
\
 o Commit A (in review, requires change)
 o Commit B (in review, no changes required)

在这种情况下,我通常做的是在第三次提交中进行Commit A请求的更改。我们的提交图现在看起来像这样:

o master
\
 o Commit A (in review, requires change)
 o Commit B (in review, no changes required)
 o Commit C (modifications to Commit A)

现在我做 git rebase -i master 并且在提交A之后但在提交B之前重新排序提交C,然后将其压缩到提交A.提交图现在看起来像这样:

o master
\ 
 o Commit A' (Commit A, incorporating the changes from Commit C)
 o Commit B' (the same changes made in Commit B, but applied to Commit A' instead of A)

最后, git review (或者您用来向gerrit提交更改的任何命令)将这两个提交重新提交给Gerrit。

正是由于这样的复杂性,大多数人强烈建议在单独的分支中处理每个不同的更改,然后在提交给Gerrit之前压缩到单个提交,而不是需要处理这些类型的情况,其中您有依赖的更改被审查与此同时。


15
2017-09-19 02:55



谢谢 - 工作得很好 - Adrian Cornish
一年后的更新:我现在只做了一个,而不是上面概述的程序 git rebase -i master,并将Commit A的命令设置为“edit”(将Commit B的命令保留为“pick”)。这将使您处于变基模式,并在工作副本中提交A.然后,您可以使用修改提交A. git commit --amend。完成修改提交A后,即可完成 git rebase --continue,它将重新应用提交B,你就完成了。 - Trevor Powell
在git rebase -i master之前你做了什么?我问这个是因为我认为需要下载(例如git review -d <number>)最新的依赖补丁集,但不是你要编辑的那个补丁集吗?否则,您只会在rebase中获得Commit A而不是Commit A和Commit B. - Fl0R1D3R
@KyuuSung正在回答的问题指出,提交A和提交B都已存在于本地计算机上,并且位于同一分支中。在那种情况下,不需要其他命令。如果您不在这种情况下,可以通常的方式从gerrit服务器获取提交B(审阅请求页面为您的服务器提供了执行此操作的必要命令)。执行此操作并检出提交B后,您将处于可以按照这些说明操作的状态。 - Trevor Powell
@KyuuSung请注意,这个答案相当陈旧,我几年没有使用过Gerrit。以上评论仅基于我目前对多年前如何运作的记忆。 - Trevor Powell


我认为你的问题与第一次提交的修正案现在将第二次提交作为依赖关系这一事实有关。这是我个人会做的,但可能有更好的方法。我看看它,因为你想改变你的提交方式,你正在处理最后的3.所以运行'git rebase -i HEAD~3'。这允许您通过切换顺序或将它们彼此融合来重新定义最后3次提交。您应该知道它以最早的顺序列出了提交。这是一个例子:

git日志如下:

提交信息:......

消息:foo2

提交信息:......

消息:bar1

提交信息:......

消息:foo1

运行上面的命令后,编辑器应弹出以下内容:

选择foo1。

选择吧1。

选择foo2。

(这假设您的第二个foo更改没有更改bar1更改的任何文件,因为这可能不起作用,如果您这样做,您应该已经修改了提交。)然后将列表更改为:

选择foo1

fixup foo2

选择吧1

之后,你将把foo1和foo2压缩成一个提交,bar1将是后面的提交。然后我会运行'git reset --soft HEAD~1'重置最新的提交,然后是'git commit --amend',它允许你更改第一次审核的提交消息,并确保包含change-id 。然后尝试你的推动。之后,您应该设置一个新的补丁,第二次更改的所有文件将被修改并仍在您的工作目录中。


2
2017-09-19 03:17



谢谢你的回答 - 我接受了Trevor,因为它是第一次 - Adrian Cornish
不用担心,我真的不在乎我的回复是否被接受。我很高兴它帮助了你:) - xshoppyx


呼叫

commit --ammend

相反,你的第二次改变


0
2018-03-15 06:49





只需git commit --amend然后git review


0
2018-01-05 09:44



如何在git审查中找到提交到--amend我有几个提交的列表? - Noa Yehezkel


我尝试过这些尝试

  1. 做了git rebase -i master
    它不起作用
  2. 然后我做了什么,我采取了文件的备份。删除了整个项目。然后再次克隆它。从备份粘贴所需文件夹中的文件,然后再次重新启动,然后按下。有效 。

-2
2018-05-19 10:20