198 lines
4.2 KiB
Markdown
198 lines
4.2 KiB
Markdown
|
|
# 立即修复 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,不需要再手动处理。
|
|||
|
|
|
|||
|
|
|