Files
gerrit/立即修复Change-Id-完整步骤.md
2025-12-22 17:12:39 +08:00

4.2 KiB
Raw Permalink Blame History

立即修复 Change-Id 问题 - 完整步骤

当前问题

提交 752962f 缺少 Change-Id需要

  1. 安装 commit-msg hook
  2. 修改提交添加 Change-Id
  3. 重新推送

完整操作步骤(在 Git Bash 中执行)

步骤 1进入项目目录

cd /d/zhini_im_android

步骤 2安装 commit-msg hook

方法 A使用 HTTP推荐最简单

# 确保 hooks 目录存在
mkdir -p .git/hooks

# 下载 commit-msg hook
curl -o .git/hooks/commit-msg http://101.43.95.130:8080/tools/hooks/commit-msg

# 设置执行权限
chmod +x .git/hooks/commit-msg

方法 B使用 SCP如果 HTTP 不可用)

gitdir=$(git rev-parse --git-dir)
scp -p -P 29419 renjianbo@101.43.95.130:hooks/commit-msg ${gitdir}/hooks/
chmod +x ${gitdir}/hooks/commit-msg

步骤 3验证 hook 已安装

# 检查文件是否存在且有执行权限
ls -la .git/hooks/commit-msg

应该看到类似输出:

-rwxr-xr-x 1 Administrator ... .git/hooks/commit-msg

步骤 4修改提交以添加 Change-Id

# 修改最后一次提交,会自动添加 Change-Id
git commit --amend --no-edit

重要--no-edit 参数表示不修改提交信息,只添加 Change-Id。

步骤 5验证 Change-Id 已添加

# 查看提交信息
git log -1

您应该看到提交信息末尾有类似这样的内容:

Change-Id: I1234567890abcdef1234567890abcdef12345678

或者使用:

# 只查看提交信息
git log -1 --pretty=format:"%B"

步骤 6重新推送

git push origin HEAD:refs/for/master

一键执行所有步骤

复制以下命令到 Git Bash 中执行:

cd /d/zhini_im_android && \
mkdir -p .git/hooks && \
curl -o .git/hooks/commit-msg http://101.43.95.130:8080/tools/hooks/commit-msg && \
chmod +x .git/hooks/commit-msg && \
git commit --amend --no-edit && \
git log -1 && \
echo "==========================================" && \
echo "Hook 已安装,提交已修改" && \
echo "现在可以执行: git push origin HEAD:refs/for/master" && \
echo "=========================================="

如果 commit --amend 后仍然没有 Change-Id

方法 1手动触发 hook

# 手动运行 hook
.git/hooks/commit-msg .git/COMMIT_EDITMSG

# 然后再次修改提交
git commit --amend --no-edit

方法 2检查 hook 文件内容

# 查看 hook 文件的前几行,确认下载正确
head -20 .git/hooks/commit-msg

应该看到类似:

#!/bin/sh
# From Gerrit Code Review ...

方法 3手动添加 Change-Id不推荐但可以作为临时方案

# 生成一个 Change-Id
CHANGE_ID="I$(git rev-parse HEAD | cut -c1-40)"

# 修改提交信息,手动添加 Change-Id
git commit --amend -m "$(git log -1 --pretty=%B)

Change-Id: $CHANGE_ID"

常见问题排查

Q: curl 命令失败?

A: 尝试使用完整路径或检查网络:

# 使用完整 URL
curl -o .git/hooks/commit-msg "http://101.43.95.130:8080/tools/hooks/commit-msg"

# 或者使用 wget如果可用
wget -O .git/hooks/commit-msg http://101.43.95.130:8080/tools/hooks/commit-msg
chmod +x .git/hooks/commit-msg

Q: chmod 在 Windows 上不工作?

A: 在 Git Bash 中chmod 应该可以工作。如果不行,可以:

# 使用 Git 的 chmod
git update-index --chmod=+x .git/hooks/commit-msg

Q: 有多个提交需要修复?

A: 使用交互式 rebase

# 假设需要修复最近 3 个提交
git rebase -i HEAD~3

# 在编辑器中,将所有提交标记为 "edit"
# 然后对每个提交执行:
git commit --amend --no-edit
git rebase --continue

验证推送成功

推送成功后,您会看到类似输出:

remote: Resolving deltas: 100% (54/54)
remote: Processing changes: refs: 1, new: 1
remote: 
remote: SUCCESS
remote: 
remote:   http://101.43.95.130:8080/c/zhini_im_android/+/123 [NEW]
remote: 
To ssh://101.43.95.130:29419/zhini_im_android
 * [new branch]      HEAD -> refs/for/master

复制返回的 URL 在浏览器中打开,可以查看您的代码变更。

后续使用

安装 hook 后,以后的所有新提交都会自动包含 Change-Id不需要再手动处理。