将参数传递给git alias不起作用

将参数传递给git alias不起作用,git,git-alias,Git,Git Alias,我在Windows 10上创建了以下别名以发出commit-am命令。我使用$1标记来注册参数,但它不起作用 git config--global alias.cam'commit-am$1' 发出以下命令将返回以下错误消息: git-cam“测试提交” 错误消息: fatal:path'test commit…'和-a没有意义 我该怎么做?我研究了如何在git别名中使用参数,但没有一个参考资料提供了一个简单的解决方案。谢谢。这是Git初学者的规则:不要使用Git commit-a 这是高级Gi

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

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

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

git-cam“测试提交”

错误消息:

fatal:path'test commit…'和-a没有意义


我该怎么做?我研究了如何在git别名中使用参数,但没有一个参考资料提供了一个简单的解决方案。谢谢。

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

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

  • git commit
    之前运行
    git add-u
    ,然后
  • 您知道,存储库没有使用写得不好的预提交脚本,该脚本在出现
    git commit-a
    时会出现错误行为
发件人:


@这是可行的,但现在当我发出git-cam“test-commit”时,它只显示未跟踪的文件。没有安排或实施任何活动。如果我分别发出add和commit命令,它可以正常工作。为什么呢

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


您有一个要添加的未跟踪文件。必须在不使用
-u
选项的情况下使用
git add
。(从技术上讲,还有其他几个命令可以帮助您实现这一点,但要使用的是git add)。

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

git config--global alias.cam'!sh-c“git提交-am$1”

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

git config--global alias.cam'!git提交-am'

但是,请记住,
commit-a
仅适用于需要进行修改的跟踪文件。因此,更好的方法是:


git config--global alias.cam'!吉特增补,git commit-m'

只是
commit-am
。它将您提供的参数放在重写命令的末尾。@jthill可以工作,但现在当我发出
git-cam“test-commit”
时,它只显示未跟踪的文件。没有安排或实施任何活动。如果我分别发出add和commit命令,它可以正常工作。为什么?谢谢你的反馈。我刚刚使用了以下别名,它可以正常工作:
git config--global alias.cam'!吉特增补,git commit-m'
。而且命令gitcam“testcommit”现在起作用了。为什么下面的别名不起作用<代码>git配置--global alias.rma'!git config--全局--取消设置别名。$1'。发出
git-rma-cam
不会删除
cam
别名,但这样做是有效的:
git-config--global--unset-alias.cam
。使用
$1
变量,您实际上正在运行
git-config--global--unset-alias.cam
。(在shell命令前面使用
GIT_TRACE=1
,让GIT向您展示它在做什么。)接下来,检查。练习:根据文档,
--unset name.of.option value_regex
做什么?正则表达式<代码> CAM 匹配?在练习之后,考虑下面的一般规则。要使Git shell别名正常工作,请使用以下模板将其编写为shell函数:
alias=!f(){command1;command2“$1”;shift;command3“$@”};f
。另一个练习(相当难,除非你做了一些shell编程):这里发生了什么?(如果您还没有用sh/bash编写程序,那么还有很多阅读工作要做!)我做了以下工作,现在可以正常工作了。再次感谢您的反馈<代码>git配置--global alias.rma'!sh-c“git config--global--unset别名$1”'