为何`git cherry-pick --allow-empty`命令未生效?
这不是Bug,是对
--allow-empty参数的场景误解 你遇到的情况其实很常见,先给你吃个定心丸:这绝对不是Git的Bug,只是你对--allow-empty参数的适用场景理解偏了~
先搞清楚两个--allow-empty的区别
Git里不同命令的--allow-empty作用是不一样的:
- 你在手册里看到的
git commit --allow-empty:这个是用来主动创建一个没有任何代码变更的空提交,正好是你想要的“补全审计轨迹”的工具。 - 而
git cherry-pick --allow-empty:它的作用是允许你去cherry-pick一个本身就是空的提交(也就是原仓库里的那个提交从一开始就没有任何变更)。但你的情况是,原提交696abcb本身是有变更的,只是这些变更已经存在于你当前的分支里了,所以cherry-pick的时候没有新内容可应用,这时候这个参数就起不到作用了。
正确的解决方法
要实现“保持提交审计轨迹一致”的目标,你可以这么做:
- 先执行你原来的命令:
这时候Git会提示你没有内容可提交,工作区干净。git cherry-pick 696abcb - 不要退出这个状态,直接执行下面的命令来创建一个和原提交信息一致的空提交:
这里的git commit --allow-empty -C 696abcb-C参数是用来复用原提交696abcb的提交信息(包括作者、日期、提交说明),完美匹配审计轨迹的需求。
或者更直接一点,跳过cherry-pick的步骤,直接创建空提交:
git commit --allow-empty -C 696abcb
这样效果是一样的,而且更快捷。
总结一下
cherry-pick --allow-empty是给“原提交本身为空”的场景用的,而你需要的是“强制生成一个空提交来对齐审计记录”,这时候git commit --allow-empty才是正确的工具~
内容的提问来源于stack exchange,提问作者Otheus
相关产品推荐
相关产品推荐

