把最后一条 commit 里的旧 Change-Id 删掉,然后重新 amend 这条 commit。

发布时间:2026/7/26 1:51:43
把最后一条 commit 里的旧 Change-Id 删掉,然后重新 amend 这条 commit。 这条命令可以拆成 3 段看从左到右通过管道|连接gitlog-1--format%B|sed/^Change-Id:/d|gitcommit--amend-F-第一段git log -1 --format%B读取最新 1 个 commit的完整提交说明。参数含义git log查看提交历史-1只看最近 1 条 commit--format%B只输出 commit message 正文raw body不含 author、date 等信息示例输出桌面上隐藏 Change-Id: Ie25c2d4ae729b88fdc77b3cf870bf03cc6452e25第二段sed /^Change-Id:/d从上面的 message 里删掉 Change-Id 那一行。部分含义sed流编辑器按规则处理文本/^Change-Id:/d正则规则^Change-Id:匹配以Change-Id:开头的行ddelete删除匹配到的行处理后变成桌面上隐藏第三段git commit --amend -F -用处理后的文本修改当前最新 commit。参数含义git commit --amend修改最近一次 commit不新增 commit-F -从文件读取 commit message-F--file指定 message 来源文件-表示标准输入 stdin也就是前面管道传过来的内容整条命令在做什么读取最新 commit message ↓ 删掉 Change-Id 行 ↓ 用这个新 message 去 amend ↓ commit-msg hook 检测到没有 Change-Id ↓ 自动补上新的 Change-Id几个注意点--amend会改 commit hash内容不变但 commit id 会变这是正常的。依赖commit-msghook如果 hook 没配置好可能删了旧的 Change-Id 却没生成新的。可以用下面命令确认gitlog-1--format%B-F -里的-不是参数占位符在 Git 里-专门表示“从标准输入读”。等价理解也可以把它理解成# 先取出 messagegitlog-1--format%B/tmp/msg.txt# 删掉 Change-Idsed/^Change-Id:/d/tmp/msg.txt/tmp/msg2.txt# 用新 message amendgitcommit--amend-F/tmp/msg2.txt管道写法只是把这三步合成一行。如果你愿意我还可以继续讲git commit --amend和git rebase的区别。