本系列是为公司写的 git & gerrit 场景使用手册的一篇.
套路部分为解决问题的步骤,心法部分为所用到的知识点的梳理.
场景:
你用 git push 向 gerrit 提交了待审核代码,一切都很顺利,你脑袋里冒出了"代码头上加了'佛祖保佑'果然有效"的想法.
此时 git 打印出如下提示,你的内心OS同步打印 "心情 -5" :
remote: Resolving deltas: 100% (14
/14
)
remote: Processing changes: refs: 1,
done
remote: ERROR: missing Change-Id
in
commit message footer
remote:
remote: Hint: To automatically insert Change-Id,
install
the hook:
remote: gitdir=$(git rev-parse --git-
dir
);
scp
-p -P 29418 liux@gerrit.xxxxx.com:hooks
/commit-msg
${gitdir}
/hooks/
remote: And
then
amend the commit:
remote: git commit --amend
remote:
To
ssh
:
//liux
@121.xx.xx.xx:29418
/kaiba_admin_yunying
.git
! [remote rejected] HEAD -> refs
/for/master
(missing Change-Id
in
commit message footer)
error: failed to push some refs to
'ssh://liux@121.xx.xx.xx:29418/sample_project.git'
|
套路:
大前提: commit-msg 文件必须已经在该项目中存在.
使用ls命令检查该文件是否存在:
$
cd
project_dir
$
ls
.git
/hooks/commit-msg
|
如果该文件不存在,则按照 git push 时产生的提示信息,获取该文件:
$ gitdir=$(git rev-parse --git-
dir
);
scp
-p -P 29418 liux@gerrit.xxxxx.com:hooks
/commit-msg
${gitdir}
/hooks/
|
上面的命令可以直接从 git push 产生的错误信息中复制出来.
如果要手敲该命令,别忘了把用户名换成自己的.
方法一: 使用 amend 选项生成 Change-Id:
如果缺失 Change-Id 的是最后一个 (head) commit, 使用以下命令即可解决问题:
$ git commit --amend
|
该命令会打开默认的 commit message 编辑器,一般是 vi