带有分支名称的提交的 Git 别名
Posted
技术标签:
【中文标题】带有分支名称的提交的 Git 别名【英文标题】:Git alias for commit with branch name 【发布时间】:2022-01-19 21:35:53 【问题描述】:我正在尝试创建一个简单的 bash 别名,以便在 MacOs 中使用我的分支名称提交。例如,如果我的分支是 CS-12,我通常会提交如下:
git commit /file/location/myfile -m "CS-12 my message goes in here"
所以我正在尝试创建一个只接收文件名和消息的别名,即:
gcm /file/location/myfile "my message goes in here"
我有以下,但它不工作:
alias gcm="echo git commit $1 -m \"$(current_branch) - $2\""
其中current_branch
是函数:
function current_branch()
ref=$(git symbolic-ref HEAD 2> /dev/null) || \
ref=$(git rev-parse --short HEAD 2> /dev/null) || return
echo $ref#refs/heads/
确实有效。
运行我的别名的输出:
gcm src/pages/register/Register.js "aasdasd asdasd"
正在回馈我:
git commit -m master - src/pages/register/Register.js aasdasd asdasd
知道我做错了什么吗? Bash 不是我的专业领域。 谢谢
【问题讨论】:
【参考方案1】:转义的引号被alias
“剥离”,因此您需要再次转义它们:
alias x="echo \\\"foo\\\""
x
"foo"
【讨论】:
【参考方案2】:别名不带参数。只写一个函数:
gcm() git commit "$1" -m "$(current_branch) - $2";
请注意,实际上不需要别名,也不应该使用它们。至少从 1996 年开始,bash 手册页就声明:“对于几乎所有目的,别名都被 shell 函数所取代。”
【讨论】:
添加到这一点,$1
和 $2
在定义别名时被扩展。
感谢您的回复。我已经尝试过了,但我得到了bash: /Users/bigweld/.bash_profile: line 60: syntax error near unexpected token `(' bash: /Users/bigweld/.bash_profile: line 60: `gcm() git commit "$1" -m "$(current_branch) - $2"; '
再想一想。当 "$(current_branch) - $2" 与 gcm src/pages/register/Register.js "aasdasd asdasd"
时,注意到传递的消息已经在 " " 中,这是否意味着我会有一些损坏的消息?即:git commit src/pages/register/Register.js -m "CS-12 - " aasdasd asdasd " "
?
@MrCujo 不,当您调用该函数时,引号将被删除。例如,如果你调用gcm foo "a b c"
,函数中$2
的值就是字符串a b c
。这与拨打gcm foo a\ b\ c
没有什么不同;引号是为了防止参数被拆分。
@MrCujo 我相信会发生语法错误,因为您仍然定义了别名。在定义函数之前删除别名定义。以上是关于带有分支名称的提交的 Git 别名的主要内容,如果未能解决你的问题,请参考以下文章