带有分支名称的提交的 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 别名的主要内容,如果未能解决你的问题,请参考以下文章

带有压缩提交的 Git 发布分支

显示带有最后提交日期的 git 分支

Git分支

sh 准备提交消息git hook以预先添加具有分支名称的提交消息

idea 新建git分支并提交

pip 意外没有安装带有分支/提交固定的最新版本的 git 包