Skip to content

修改提交信息

修改指定 commit 的提交信息(commit message)。

命令

bash
# 交互式选择 commit
gw amend

# 直接指定 commit hash
gw amend a1b2c3d
gw amend HEAD
gw amend HEAD~2

使用方式

方式 1: 交互式选择(推荐)

不带参数运行,从最近 20 个 commit 中选择:

bash
gw amend

方式 2: 指定 commit hash

直接指定要修改的 commit:

bash
# 使用短 hash
gw amend a1b2c3d

# 使用完整 hash
gw amend a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0

# 使用相对引用
gw amend HEAD      # 最新 commit
gw amend HEAD~1    # 上一个 commit
gw amend HEAD~2    # 上上个 commit

交互流程

步骤 1: 选择 commit(如果未指定)

? 选择要修改的 commit:
❯ a1b2c3d ✨ feat(auth): 添加用户登录功能 2026-01-19 14:30:00
  d4e5f6g 🐛 fix(auth): 修复登录bug 2026-01-18 10:20:00
  h7i8j9k 📝 docs: 更新文档 2026-01-17 16:45:00
  ...

步骤 2: 显示当前信息

当前 commit 信息:
  Hash:    a1b2c3d
  Message: ✨ feat(auth): 添加用户登录功能
  Date:    2026-01-19 14:30:00 +0800
────────────────────────────────────────

步骤 3: 输入新的 commit message

? 输入新的 commit message: ✨ feat(auth): 实现用户登录和注册功能

提示: 默认会显示原来的 message,可以直接编辑

步骤 4: 确认修改

修改预览:
  Commit:      a1b2c3d
  旧 Message:  ✨ feat(auth): 添加用户登录功能
  新 Message:  ✨ feat(auth): 实现用户登录和注册功能
────────────────────────────────────────

? 确认修改? (y/N)

使用场景

场景 1: 修改最新 commit

bash
gw amend HEAD
# 或
gw amend

# 输入新的 message
# 确认

 修改成功

特点: 使用 git commit --amend,不会改变 commit hash

场景 2: 修改历史 commit

bash
gw amend HEAD~3

# 输入新的 message
# 确认

⚠️  警告: 修改非最新 commit 需要使用 rebase,可能会改变 commit hash
   这会影响已推送到远程的 commit,请谨慎操作

? 确认修改? (y/N) y

正在执行 rebase...
 修改成功

⚠️  注意: commit hash 已改变
   如果已推送到远程,需要使用 force push:
   git push --force-with-lease

特点: 使用 git filter-branch,会改变 commit hash

场景 3: 修正拼写错误

bash
# 发现最新 commit 的 message 有拼写错误
gw amend HEAD

# 旧: feat: add logn feature
# 新: feat: add login feature

 修改成功

场景 4: 补充详细说明

bash
gw amend HEAD

# 旧: fix: bug
# 新: fix(auth): 修复登录页面在 Safari 浏览器下的兼容性问题

 修改成功

注意事项

⚠️ 修改历史 commit

  • 会改变 commit hash - 所有后续 commit 的 hash 都会改变
  • 影响团队协作 - 如果已推送到远程,其他人需要重新拉取
  • 需要 force push - 推送时必须使用 --force-with-lease

🔒 Force Push

修改已推送的 commit 后,需要强制推送:

bash
# 推荐:更安全的 force push
git push --force-with-lease

# 或:强制推送(不推荐)
git push --force

📝 Commit Message 规范

建议遵循 Conventional Commits 规范:

<type>(<scope>): <subject>

<body>

<footer>

示例:

feat(auth): 添加用户登录功能

实现了基于 JWT 的用户认证系统,包括:
- 登录接口
- 注册接口
- Token 刷新机制

Closes #123

示例

示例 1: 修改最新 commit 的 message

bash
$ gw amend HEAD

当前 commit 信息:
  Hash:    a1b2c3d
  Message: feat: add feature
  Date:    2026-01-19 14:30:00

? 输入新的 commit message: feat(auth): 添加用户登录功能

修改预览:
  Commit:      a1b2c3d
 Message:  feat: add feature
 Message:  feat(auth): 添加用户登录功能

? 确认修改? y

 修改成功

示例 2: 修改指定 hash 的 commit

bash
$ gw amend d4e5f6g

当前 commit 信息:
  Hash:    d4e5f6g
  Message: fix bug
  Date:    2026-01-18 10:20:00

? 输入新的 commit message: fix(auth): 修复登录页面崩溃问题

⚠️  警告: 修改非最新 commit 需要使用 rebase,可能会改变 commit hash

? 确认修改? y

正在执行 rebase...
 修改成功

⚠️  注意: commit hash 已改变
   如果已推送到远程,需要使用 force push:
   git push --force-with-lease

示例 3: 交互式选择并修改

bash
$ gw amend

? 选择要修改的 commit:
 a1b2c3d feat: add feature 2026-01-19 14:30:00
  d4e5f6g fix: bug 2026-01-18 10:20:00

? 输入新的 commit message: feat(auth): 添加用户登录和注册功能

? 确认修改? y

 修改成功

相关命令

  • gw c - 提交代码
  • gw ad - 修改提交时间
  • gw log - 查看提交日志
  • git commit --amend - Git 原生修改命令

技术细节

实现方式

最新 commit:

bash
git commit --amend -m "新的 commit message"

历史 commit:

bash
git filter-branch -f --msg-filter '
  if [ "$GIT_COMMIT" = "commit-hash" ]; then
    echo "新的 commit message"
  else
    cat
  fi
' parent-hash..HEAD

与 git commit --amend 的区别

特性gw amendgit commit --amend
修改最新 commit
修改历史 commit
交互式选择
指定 hash
预览修改
安全提示

常见问题

Q: 修改 commit message 会改变 commit hash 吗?

A:

  • 最新 commit: 会改变 hash(因为 message 是 hash 计算的一部分)
  • 历史 commit: 会改变该 commit 及所有后续 commit 的 hash

Q: 可以修改多行 commit message 吗?

A: 可以,直接在输入时换行即可。但建议使用简洁的单行 message,详细说明放在 body 部分。

Q: 修改后如何验证?

A: 使用 gw loggit log 查看提交历史,确认 message 已更新。

bash
gw log
# 或
git log --oneline

Q: 修改失败怎么办?

A: 如果修改历史 commit 失败,可以使用 git reflog 找回之前的状态:

bash
git reflog
git reset --hard HEAD@{1}

Q: 可以批量修改多个 commit 吗?

A: 当前版本不支持批量修改。如需批量修改,建议使用 git rebase -i 命令。

Q: 与 gw c 有什么区别?

A:

  • gw c - 创建新的 commit
  • gw amend - 修改已有的 commit message

最佳实践

1. 修改前先检查状态

bash
# 查看当前分支和提交历史
gw log

# 确认要修改的 commit
git log --oneline -5

2. 遵循 commit message 规范

使用 Conventional Commits 格式:

feat: 新功能
fix: 修复 bug
docs: 文档更新
style: 代码格式
refactor: 重构
perf: 性能优化
test: 测试相关
chore: 其他杂项

3. 修改后及时推送

bash
# 修改后立即推送,避免与他人冲突
git push --force-with-lease

4. 团队协作时谨慎使用

如果 commit 已经被其他人拉取,修改会导致冲突。建议:

  • 只修改本地未推送的 commit
  • 或在团队内提前沟通

Released under the MIT License.