Files
gerrit/立即修复Change-Id-完整步骤.md

198 lines
4.2 KiB
Markdown
Raw Permalink Normal View History

2025-12-22 17:12:39 +08:00
# 立即修复 Change-Id 问题 - 完整步骤
## 当前问题
提交 `752962f` 缺少 Change-Id需要
1. 安装 commit-msg hook
2. 修改提交添加 Change-Id
3. 重新推送
## 完整操作步骤(在 Git Bash 中执行)
### 步骤 1进入项目目录
```bash
cd /d/zhini_im_android
```
### 步骤 2安装 commit-msg hook
**方法 A使用 HTTP推荐最简单**
```bash
# 确保 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 不可用)**
```bash
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 已安装
```bash
# 检查文件是否存在且有执行权限
ls -la .git/hooks/commit-msg
```
应该看到类似输出:
```
-rwxr-xr-x 1 Administrator ... .git/hooks/commit-msg
```
### 步骤 4修改提交以添加 Change-Id
```bash
# 修改最后一次提交,会自动添加 Change-Id
git commit --amend --no-edit
```
**重要**`--no-edit` 参数表示不修改提交信息,只添加 Change-Id。
### 步骤 5验证 Change-Id 已添加
```bash
# 查看提交信息
git log -1
```
您应该看到提交信息末尾有类似这样的内容:
```
Change-Id: I1234567890abcdef1234567890abcdef12345678
```
或者使用:
```bash
# 只查看提交信息
git log -1 --pretty=format:"%B"
```
### 步骤 6重新推送
```bash
git push origin HEAD:refs/for/master
```
## 一键执行所有步骤
复制以下命令到 Git Bash 中执行:
```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
```bash
# 手动运行 hook
.git/hooks/commit-msg .git/COMMIT_EDITMSG
# 然后再次修改提交
git commit --amend --no-edit
```
### 方法 2检查 hook 文件内容
```bash
# 查看 hook 文件的前几行,确认下载正确
head -20 .git/hooks/commit-msg
```
应该看到类似:
```bash
#!/bin/sh
# From Gerrit Code Review ...
```
### 方法 3手动添加 Change-Id不推荐但可以作为临时方案
```bash
# 生成一个 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:** 尝试使用完整路径或检查网络:
```bash
# 使用完整 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 应该可以工作。如果不行,可以:
```bash
# 使用 Git 的 chmod
git update-index --chmod=+x .git/hooks/commit-msg
```
### Q: 有多个提交需要修复?
**A:** 使用交互式 rebase
```bash
# 假设需要修复最近 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不需要再手动处理。