如何推送Gerrit而不创建新的提交



你好,我的问题是我在代码中做了一些修改后,我把它推送到Gerrit仓库。假设我做了一个新的修改或者修正了一个错别字。我想知道如何在相同的提交中再次推送我的代码而不创建新的。

这就是我第一次提交的方式

git add .
git commit -m "whatever"
push ssh://username@gerrit.bk.com:29418/val/Test_Gerrit HEAD:refs/for/master 

现在,在另一个修改之后,这就是我如何修改

git add .
git commit --amend
push ssh://username@gerrit.bk.com:29418/val/Test_Gerrit HEAD:refs/for/master

,但它总是在Gerrit中创建一个新的提交。我如何修改和推送我的代码而不创建一个新的提交?

但是它总是在Gerrit中创建一个新的提交

这确实是预期的结果,如"push to Gerrit change with force or not ?":

所示。

外卖信息:强制推送("当推送到Gerrit的HEAD:refs/for/branch时,即使本地分支的提交历史在rebase/amend之后被重写,-f")也不需要

但是:如果Change-Id缺失或不同,则创建一个新的提交。

Gerrit文档中提到:

如果找到匹配的审查,Gerrit将在现有更改上添加新的提交作为新的补丁集。


OP Louay Gourrida报道:

问题是提交是在没有 change - id的情况下创建的(change - id是自动生成的),所以当你在提交中进行更改并再次推送时,Gerrit不会识别提交原因,因为没有change - id。
因此,它创建一个新的提交,也没有Change-Id。

我必须在我的本地/.git/hooks中添加一个名为commit-msg的文件,该文件在每次提交时自动生成Change-Id

这是commit-msg钩子:

git commit和大多数其他提交创建工具(如Git citool或Git gui)自动调用的Git钩子。

Gerrit Code Review提供的这个钩子的实现是一个简短的shell脚本,它自动在提交消息的页脚插入一个全局唯一的Change-Id标签。

当出现时,Gerrit使用这个标签来跟踪跨精选和重基的提交。