You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何单台设备上git log的author过滤语法发生变化?

问题原因与解决方法

核心原因

两台设备的差异源于zsh的通配符扩展选项配置不一致,和Git版本无关:

  • zsh的EXTENDED_GLOB选项开启时,会将括号()、竖线|当作通配符解析,此时双引号内的这些字符也会被shell处理,因此需要转义才能让Git接收到正确的正则表达式。
  • 若EXTENDED_GLOB关闭,或开启了QUOTED_GLOB(让引号内的通配符不被解析),则双引号内的括号、竖线不会被shell处理,直接传递给Git,此时无需转义。

大概率是其中一台设备的~/.zshrc或其他zsh配置文件中,新增/修改了setopt EXTENDED_GLOB或unsetopt QUOTED_GLOB这类配置,导致语法处理逻辑变化。

统一语法的解决步骤

1. 确认配置差异

在两台设备的终端分别执行:

setopt | grep -E "(EXTENDED_GLOB|QUOTED_GLOB)"

对比输出结果,找到差异的配置项。

2. 统一zsh配置

根据需求选择任一方式:

  • 恢复需要转义的语法:确保两台设备都开启EXTENDED_GLOB,并关闭QUOTED_GLOB。在~/.zshrc中添加:
    setopt EXTENDED_GLOB
    unsetopt QUOTED_GLOB
    
    执行source ~/.zshrc生效后,即可继续使用带转义的命令。
  • 统一为无需转义的语法:关闭EXTENDED_GLOB或开启QUOTED_GLOB。在~/.zshrc中添加:
    unsetopt EXTENDED_GLOB
    # 或者开启QUOTED_GLOB
    setopt QUOTED_GLOB
    
    生效后,不带转义的命令即可在两台设备正常运行。

3. 跨环境通用的写法(推荐)

不管zsh配置如何,使用单引号包裹正则表达式,shell不会解析单引号内的特殊字符,直接传递给Git:

git log --author='(email1@gmail.com)|(email2@gmail.com)' --after=2023-03-01

这种写法在任何zsh配置下都能正常工作,无需担心转义问题。

内容的提问来源于stack exchange,提问作者Emanuele Alfano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:52:36