Git alias推送失败,出现错误

Git alias推送失败,出现错误,git,Git,我正在创建一个git别名,如下所示(为了可读性,将其分成几行): 此命令将master合并到release,从命令行params创建一个新标记,并将其推送到origin/release。它一直工作到标记创建的点。当我跑步时,我会得到以下信息: Switched to branch 'release' Already up-to-date. error: src refspec Testing does not match any. error: failed to push some refs

我正在创建一个git别名,如下所示(为了可读性,将其分成几行):

此命令将
master
合并到
release
,从命令行params创建一个新标记,并将其推送到origin/release。它一直工作到标记创建的点。当我跑步时,我会得到以下信息:

Switched to branch 'release'
Already up-to-date.
error: src refspec Testing does not match any.
error: failed to push some refs to 'git@github.com:Stockopedia/prototype.git'
我有两个问题:

  • 最后一个命令git push origin release--tags不起作用。 为什么?
  • 最后两行是什么意思?为什么会这样

  • 这可能更好,但我还没有完全测试它-它的格式是为了可读性,而不是为了外壳的使用,您可能需要调整换行符和间距:

    git config --global alias.make-release '
    ! _() { if test "$1" != "2" ;
            then
              echo "git make-release TAG_NUMBER DESCRIPTION"
              return 1
            fi;
            git checkout release &&
            git merge master &&
            git fetch --tags &&
            git tag -a "$1" -m "$2" &&
            git push origin release --tags
    }; _'
    
    我认为最大的问题是误解别名是如何扩展的。您发布的代码会导致一个扩展,如果git make release arg1 arg2看起来像shell:

    _() { if .... }; _ "$#" && git checkout .... && git push origin release --tags arg1 arg2
    
    如果
    $#
    $1
    $2
    的扩展可能不是您所期望的,甚至可能是空的-参数不会像您所希望的那样传递给
    git标记。要解决这一问题,整个函数都需要在函数内部,函数名是别名中的最后一项,因此您基本上可以得到:

    _() { .... }; _ arg1 arg2
    
    {…};\uarg1 arg2
    -非常好的建议!对于后代,别名的git文档如下所示:
    _() { .... }; _ arg1 arg2