缺少提交消息中的Change-Id时出现Gerrit错误

Pan*_*hen 48 git merge branch master gerrit

我在远程存储库中设置了一个分支,并在该分支上进行了一些提交.现在我想将远程分支合并到远程主服务器.

以下是我的操作:

  1. 结帐分支
  2. 结账大师
  3. 合并分支并修复合并错误
  4. 承诺
  5. push origin HEAD:refs/for/master

但是在第5步获取错误消息:

remote: Resolving deltas:   0% (0/12)

remote: ERROR: missing Change-Id in commit message
...

remote: Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699a

To ssh://prc@test.gerrit.xxx.com:29418/hello_git
 ! [remote rejected] HEAD -> refs/for/master (missing Change-Id in commit message)
Run Code Online (Sandbox Code Playgroud)

Raf*_*cki 77

检查您的提交是否包含Change-Id: ...在他们的描述中.每次提交都应该有它们.

如果不是,请使用git rebase -i重新设置提交消息并添加正确的Change-Ids(通常这是已审核提交的第一个版本的SHA1).

将来,您应该安装commit hook,它会自动添加所需的Change-Id.

scp -p -P 29418 username@your_gerrit_address:hooks/commit-msg .git/hooks/在存储库目录中执行或从中下载 http://your_gerrit_address/tools/hooks/commit-msg并复制到.git/hooks

  • @qneill听起来像个bug,你可以向Gerrit开发者报告吗? (2认同)
  • 我使用`git log`找到了changedId,但仍然得到了同样的错误. (2认同)

小智 27

试试这个:

git commit --amend
Run Code Online (Sandbox Code Playgroud)

然后复制并粘贴Change-Id: I55862204ef71f69bc88c79fe2259f7cb8365699a文件的末尾.

保存并再次推送!

  • 这是一个快速解决方案,但提供了“正确”的答案@RafałRawicki (2认同)

Mat*_*ell 7

如果您需要更改-ID添加到多个提交,您可以从您的格里特服务器下载钩和运行这些命令更改-ID添加到需要它们一次全部提交.下面的示例修复了当前分支上尚未推送到上游分支的所有提交.

tmp=$(mktemp)
hook=$(readlink -f $(git rev-parse --git-dir))/hooks/commit-msg
git filter-branch -f --msg-filter "cat > $tmp; \"$hook\" $tmp; cat $tmp" @{u}..HEAD
Run Code Online (Sandbox Code Playgroud)


man*_*lds 5

这是因为Gerrit被配置为在提交消息中要求Change-Id。

http://gerrit.googlecode.com/svn-history/r6114/documentation/2.1.7/error-missing-changeid.html

您必须更改要推送的每个提交的消息,以包含更改ID(使用git filter-branch),然后再推送。