Git cherry-pick时能否自动跳过空提交并继续执行?
解决Git Cherry-Pick自动跳过空补丁提交的方案
方法一:提前筛选未应用的提交再Cherry-Pick
先找出foo-release中尚未在foo-dev分支上应用的提交,只对这些提交执行cherry-pick,从根源避免空补丁问题:
- 切换到目标分支
foo-dev:
git checkout foo-dev
- 筛选出
foo-release中相对于foo-dev的未应用提交,并执行cherry-pick:
git cherry foo-dev foo-release | grep '^+' | awk '{print $2}' | xargs git cherry-pick
git cherry foo-dev foo-release:对比两个分支,列出foo-release独有的提交,+前缀表示未在foo-dev应用的提交,-表示已应用- 后续管道命令提取这些未应用提交的哈希值,批量传给
git cherry-pick
方法二:用脚本自动跳过空补丁暂停
如果不想提前筛选,可以用循环脚本自动处理cherry-pick过程中的空补丁暂停:
git cherry-pick main..foo-release while [ $? -eq 1 ]; do git cherry-pick --skip done
- 执行cherry-pick后,若返回值为1(表示遇到暂停,比如空补丁),则自动执行
git cherry-pick --skip跳过当前提交,直到整个cherry-pick流程完成 - 注意:如果遇到真实代码冲突(不是空补丁),这个脚本也会直接跳过,所以使用前确认当前cherry-pick范围内只有空补丁问题,若有真实冲突需要手动处理时,需中断脚本解决冲突后再继续
补充说明
你提到的--allow-empty和--keep-redundant-commits确实不符合需求:
--allow-empty:允许创建空提交,而非跳过已应用的提交--keep-redundant-commits:会将已应用的提交以空提交的形式保留在目标分支,这会引入冗余提交,不是你想要的结果
内容的提问来源于stack exchange,提问作者usernamenumber
相关产品推荐
相关产品推荐

