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

198 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 立即修复 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不需要再手动处理。