如何在非交互式下执行git commit --fixup=amend并修改提交信息?
解决方案:手动构造amend类型的fixup提交
要实现等效于git commit --fixup=amend::/'Upgrade to foo' -m "Upgrade to bar"的非交互式操作,可通过Git底层(plumbing)命令分步完成:
暂存当前修改(若未完成暂存):
git add <目标文件路径> # 或用`git add .`暂存所有修改定位目标提交的哈希值(通过提交信息匹配):
TARGET_COMMIT=$(git rev-parse --verify ":/'Upgrade to foo'")构造autosquash识别的提交信息:
必须以amend!为前缀(这是Git自动合并时识别“修改原提交信息”逻辑的关键标记),后面跟上你想要的新提交信息:AMEND_MSG="amend! Upgrade to bar"用底层命令创建提交:
借助git commit-tree(纯底层命令,无交互编辑器触发)完成提交创建:# 生成暂存区对应的树对象哈希 TREE_HASH=$(git write-tree) # 创建新提交,父提交为当前HEAD,提交信息来自变量 NEW_COMMIT=$(echo "$AMEND_MSG" | git commit-tree $TREE_HASH -p HEAD) # 将HEAD指向新创建的提交 git update-ref HEAD $NEW_COMMIT
完成上述步骤后,你就得到了与--fixup=amend行为完全一致的提交。后续执行git rebase --autosquash <some-much-earlier-commit>时,Git会自动将该提交合并到目标提交,并把目标提交的信息替换为Upgrade to bar。
关键说明
amend!前缀是--autosquash识别“合并修改+替换原提交信息”逻辑的核心标记,不可省略- 整套流程完全非交互式,适配脚本自动化场景
git commit-tree是Git核心底层命令,直接操作提交对象,无上层porcelain命令的交互限制
内容的提问来源于stack exchange,提问作者paradroid
相关产品推荐
相关产品推荐

