将多个 git 命令添加到一行以在终端别名中使用



我正在尝试编写一个新的别名命令来执行以下操作:

git push origin [current branch]

我有以下内容返回当前分支

git rev-parse --abbrev-ref HEAD

我无法计算:

a( 如何将两个命令添加到一行中,而不是让它们按程序运行。例如,返回当前分支,但随后也在一行上运行它。我尝试了以下别名:

alias "gps cb"="git push origin "git rev-parse --abbrev-ref HEAD""

b( 如何有一个带有空格的别名,例如gps cb,我有一个单独的gps所以我宁愿在别名中保留后面有一个空格的模式,这样写gps mastergps cb就不会太多的脑力工作

定义为:

push-branch() {
git push origin "$(git rev-parse --abbrev-ref HEAD)"
}

用作:

$ push-branch

请注意,别名中不能有空格。你需要一个函数。您可以将当前的gps别名替换为接受参数的函数:

gps() {
case "$1" in)
cb) push-branch;;
*) # whatever your current gps does ;;
esac
}

你根本不需要别名定义,这可以通过简单的函数调用来解决。

git-push-origin() {
git push origin "$(git rev-parse --abbrev-ref HEAD)"
}

只需从命令行调用函数git-push-origin即可。您还可以将函数定义添加到.bashrc,以便在启动时加载它们。

git 有自己的别名系统,所以你可以这样做

git config --global alias.pushCurrent '!exec git push origin $(git rev-parse --abbrev-ref HEAD)'

添加 git 命令

git pushCurrent

但是git push应该将当前分支的头部推到原点,因此您可能有一些特殊情况来证明额外别名的合理性,您可以对其进行调整以满足您的需求

您可以使用替换$()将一个命令的输出用作另一个命令的参数。

git push origin "$(git rev-parse --abbrev-ref HEAD)"

别名或函数名称中的空格是不可能的,但即使允许它们,我认为您也不想使用它们,因为您必须转义空格才能调用它们("gps cb"gps cb(。

如果您已经定义了自己的gps脚本,并希望它的行为因第一个参数而异,则必须使用ifcase语句来检查第一个参数。

最新更新