-2

我在 Windows 10 上创建了以下别名来发出commit -am <commit message>命令。我使用$1令牌来注册一个参数,但它不起作用。

git config --global alias.cam 'commit -am $1'

发出以下命令会返回以下错误消息:

git cam "test commit"

错误信息:

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

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

4

2 回答 2

1

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

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

  • 你会在git add -u之前跑git commit,并且
  • 您知道存储库没有使用编写不当的预提交脚本,该脚本在git commit -a.

根据您的评论

@jthill 那行得通,但是现在当我发出 git cam “test commit” 时它只显示未跟踪的文件。没有任何事情是上演或承诺的。如果我分别发出添加和提交命令,它工作正常。这是为什么?

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

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

于 2021-05-14T01:08:51.537 回答
0

一种解决方案是将别名的 git 命令传递给 shell 命令。这样,$1参数将不会再次附加到命令的末尾,从而导致它成功。

git config --global alias.cam '!sh -c "git commit -am $1"'

或者干脆省略$1参数标记:

git config --global alias.cam '!git commit -am'

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

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

于 2021-05-15T10:53:48.887 回答