cherry pick后git commit --amend如何避免生成新Change-Id
Git amend操作避免生成额外Change-Id的方法
背景说明
Change-Id自动生成是Gerrit代码评审体系配套的commit-msg Git钩子的默认行为,cherry pick后amend出现双Change-Id,是因为钩子未识别到提交中已有的Change-Id,因此额外新增了一条记录。
避免amend时生成新Change-Id的方案
- 方案1:单次操作跳过钩子校验
执行amend时添加--no-verify参数,直接跳过所有Git钩子的执行,会保留原有提交的Change-Id,不会触发新增逻辑,命令如下:
注意:该参数会跳过所有pre-commit、commit-msg类钩子,如果你本地配置了其他提交校验规则,这些规则也会同时失效。git commit --amend --no-verify - 方案2:规范Change-Id格式让钩子自动复用
commit-msg钩子默认仅识别提交信息最后一段、单独占一行、且以Change-Id: I开头的内容为有效Change-Id。cherry pick过来的提交如果原有Change-Id不在提交信息末尾、或者格式不符合规则,就会被钩子判定为无Change-Id从而新增。
你可以在amend编辑提交信息时,手动将需要保留的Change-Id移到提交信息的最末尾,单独占一行,无需其他修改,钩子就会自动复用该ID,不会生成新的Change-Id。
临时禁用Change-Id自动生成的方法
- 单次操作禁用:直接使用上述
--no-verify参数即可,仅影响当前一次提交/amend操作,后续提交仍然会正常生成Change-Id。 - 当前仓库临时禁用(适用于多步提交都不需要生成Change-Id的场景):
- 先临时移除commit-msg钩子:
mv .git/hooks/commit-msg .git/hooks/commit-msg.bak - 完成所有不需要生成Change-Id的提交操作后,恢复钩子即可:
mv .git/hooks/commit-msg.bak .git/hooks/commit-msg
- 先临时移除commit-msg钩子:
已有双Change-Id的修复方式
执行git commit --amend,手动删除提交信息中多余的Change-Id,仅保留需要的那一条,且确保它在提交信息的最末尾单独占行,保存退出即可。担心触发钩子新增的话,可以加上--no-verify参数。
内容的提问来源于stack exchange,提问作者Cameron121341
相关产品推荐
相关产品推荐

