【问题标题】:git commit -m "add !empty check" zsh: event not found: emptygit commit -m "add !empty check" zsh: event not found: empty
【发布时间】:2020-07-16 05:29:59
【问题描述】:

我刚刚观察到有!在 git commit 消息触发 zsh 中的事件之前。

不确定是 zsh 问题还是 git 功能。请解释一下。

【问题讨论】:

    标签: git zsh git-commit oh-my-zsh


    【解决方案1】:

    这与git无关,你的shell正在尝试扩展!

    使用\! 来转义字符或使用'单引号' 而不是"双引号" 来禁用shell 在字符串中的变量/历史扩展。

    要了解有关您的 shell 历史扩展的更多信息,请查看 zsh's User Guide - 3.6.1: History expansion

    最简单的用例是在忘记在开头指定 sudo 后使用 sudo !! 重新运行命令。


    关于git commit的旁注:

    我强烈建议反对在提交时使用-m,因为它会减少发现提交错误的机会。

    如果您不使用-m,用于消息输入的文本编辑器将有一个暂存/未暂存更改的列表。在最终确定提交之前,简要查看这些列表总是一个好主意。

    (如果你发现有问题,只需用空消息保存,提交将被中止)

    【讨论】:

      【解决方案2】:

      for bash as well 似乎是这样。

      尝试转义该字符以避免任何与 shell 相关的副作用:

      git commit -m "add \!empty check"
      # or
      git commit -m 'add !empty check'
      

      (见jthillcomment单引号)

      turn off history substitution 使用set +H

      【讨论】:

      • 所以它是 bash 功能还是 git 功能?我知道逃跑,但想了解到底发生了什么?
      • @JagadeshaNH 这不是 git 功能,只是 shell(bash 或 zsh)功能
      • SInglequotes 也会这样做,在大多数情况下,我喜欢那些我不是专门在 shell 扩展之后的情况。 git commit -m 'add !empty check'。而且打字速度更快。
      • @jthill 好点。我已经相应地编辑了答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多