为何git commit --fixup无法与--file/-F混用?有无更简洁方案?
解决
git commit --fixup与-F冲突的简洁方法 有两个简洁的方案,不用写复杂的GIT_EDITOR脚本就能实现你的需求:
方案一:手动构造符合要求的提交信息文件
--fixup amend:hash的核心是提交信息首行必须为amend! <原提交首行>,我们可以自己生成这个格式的文件,再用git commit --file提交:
# 获取目标提交的原始首行 ORIG_SUBJECT=$(git log --format=%s -n1 21d53a765cf8925ffcdae9199dde4e96760be974) # 构造包含fixup标记和自定义内容的提交信息文件 cat > /tmp/fixup_full_msg <<EOF amend! $ORIG_SUBJECT $(cat /tmp/z) EOF # 提交这个fixup amend提交 git commit --file /tmp/fixup_full_msg
这个操作完全避开了--fixup和-F的冲突,同时严格遵循Git对amend!类型fixup提交的格式要求。
方案二:用管道快速拼接提交信息
如果不想生成临时文件,也可以用管道直接拼接内容:
git log --format="amend! %s" -n1 21d53a765cf8925ffcdae9199dde4e96760be974 | cat - /tmp/z | git commit --file -
这里git log生成amend!开头的首行,cat - /tmp/z把自定义内容接在后面,最后通过--file -让Git从标准输入读取提交信息。
补充说明
Git禁止--fixup和-F同时使用,是因为--fixup会自动生成固定格式的提交信息,而-F是指定自定义信息,两者逻辑互斥。上面的方法本质是手动实现了--fixup amend:hash的核心逻辑(生成正确的首行),同时加入了你自定义的提交内容,完美匹配你的需求——提交后可以直接审查,不满意就用git reset HEAD~丢弃,完全不用碰reflog。
内容的提问来源于stack exchange,提问作者nhed
相关产品推荐
相关产品推荐

