将参数传递给 git 别名不起作用

Passing an argument to git alias not working

我在 Windows 10 上创建了以下别名来发出 commit -am <commit message> 命令。我使用 </code> 标记来注册一个参数,但它不起作用。</p> <p><code>git config --global alias.cam 'commit -am '

发出以下命令returns错误信息如下:

git cam "test commit"

错误信息:

fatal: paths 'test commit ...' with -a does not make sense

如何进行这项工作?我研究了如何在 git 别名中使用参数,但是 none 的资源为我的问题提供了一个简单的解决方案。谢谢。

这是 Git 初学者的规则:不要使用 git commit -a

这是高级 Git 用户的规则:不要使用 git commit -a 除非:

  • 你会 运行 git add -ugit commit 之前
  • 您知道存储库没有使用编写错误的预提交脚本,该脚本在 git commit -a 存在时会出现异常行为。

来自 :

@jthill That works, but now it just displays the untracked files when I issue git cam "test commit". Nothing is staged or committed. If I issue the add and commit commands separately, it works fine. Why is that?

这里的问题是 git commit -a 不像 git add 后面跟着 git commit。它更像是 git add -u 后跟 git commit(但即便如此,仍然 完全 相同)。具体来说,git add -u 只会更新 Git 已经知道 的文件。 -u中的u代表更新,即不添加任何未跟踪的文件,但适当更新所有跟踪的文件。

您有一个未跟踪的文件要添加。您必须使用git add而不-u选项来执行此操作。 (从技术上讲,还有其他几个命令可以让您到达那里,但 git add 是要使用的命令。)

一种解决方案是将带别名的 git 命令传递给 shell 命令。这样,</code> 参数将不会再次附加到命令的末尾,从而使其成功。</p> <p><code>git config --global alias.cam '!sh -c "git commit -am "'

或者干脆省略 </code> 参数标记:</p> <p><code>git config --global alias.cam '!git commit -am'

但是请记住,commit -a 仅适用于 跟踪的 需要暂存修改的文件。所以更好的方法是:

git config --global alias.cam '!git add . && git commit -m'