Fish shell如何创建支持任意数量-m参数的git commit别名
Fish Shell 实现简洁的gcom git commit 别名
不需要用string join拼接命令加eval的笨重写法,直接利用Fish原生的数组参数展开能力就能实现需求,不仅代码简洁,还天然支持特殊字符转义、-开头的选项透传,没有命令注入风险。
最终实现代码
你可以直接把下面的函数定义写到Fish配置文件中,也可以先在终端执行定义,再运行funcsave gcom永久保存到用户函数目录:
function gcom set -l args for param in $argv # 透传所有以-开头的git commit原生选项 if string match -q -- '-*' $param set -a args $param # 普通文本参数自动添加-m前缀 else set -a args -m $param end end git commit $args end
使用说明
- 多段提交信息直接按顺序传入即可,每个字符串会自动对应一个
-m参数:# 简写输入 gcom "feat: 新增用户中心" "补充头像上传逻辑" "关联迭代#456" # 实际执行的命令 git commit -m "feat: 新增用户中心" -m "补充头像上传逻辑" -m "关联迭代#456" - 支持原样透传所有
git commit原生选项,短选项、长选项都可以直接拼接使用:# 输入:-a 自动暂存已跟踪修改,--no-verify 跳过提交钩子 gcom -a --no-verify "fix: 修复列表分页bug" "处理页码越界场景" # 实际执行的命令 git commit -a --no-verify -m "fix: 修复列表分页bug" -m "处理页码越界场景" - 全程通过数组传递参数,不需要手动拼接命令字符串,提交信息里包含引号、
$、反引号等特殊字符时也不会出现转义错误,相比eval实现方案更稳定安全。
内容的提问来源于stack exchange,提问作者AF7
相关产品推荐
相关产品推荐

