将多个git命令添加到一行,以便在终端别名

时间:2017-08-25 13:11:32

标签: git bash

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

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

并不是太多精神上的工作

4 个答案:

答案 0 :(得分:3)

定义为:

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

用作:

$ push-branch

请注意aliases cannot have spaces in them.您需要一个功能。您可以使用带参数的函数替换当前的gps别名:

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

git拥有自己的别名系统,所以你可以做到

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

添加了git命令

git pushCurrent

但只是git push应该将当前分支的头部推到原点,所以你可能有一些特殊情况来证明额外的别名,你可以调整它以满足你的需求

答案 3 :(得分:0)

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

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

别名或函数名称中的空格是不可能的,但即使它们被允许,我也不认为你会想要使用它们,因为你必须逃离空间才能调用它们("gps cb"gps\ cb)。

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