具有多个命令和参数的Git别名

具有多个命令和参数的Git别名,git,Git,我正在尝试创建一个全局git别名,以便在一个命令中删除分支的本地和远程副本。我希望别名接受以下输入: $ git purge myBranch 并生成以下命令: $ git branch -d myBranch $ git push origin --delete myBranch 在许多其他尝试中,我尝试了以下方法: $ git config alias.purge '!sh "git branch -d $1; git push origin --delete $1"' 但我得到了这个

我正在尝试创建一个全局git别名,以便在一个命令中删除分支的本地和远程副本。我希望别名接受以下输入:

$ git purge myBranch
并生成以下命令:

$ git branch -d myBranch
$ git push origin --delete myBranch
在许多其他尝试中,我尝试了以下方法:

$ git config alias.purge '!sh "git branch -d $1; git push origin --delete $1"'
但我得到了这个错误:

sh: 0: Can't open git branch -d myBranch; git push origin --delete myBranch
fatal: While expanding alias 'purge': 'sh "git branch -d $1; git push origin --delete $1"': No such file or directory
如何创建一个全局git别名,该别名接受一个参数并以这种方式将其转发给两个单独的git命令

更新:

根据@Chris的建议,我尝试了以下方法:

git config --global alias.purge '!git branch -d $1 && git push origin --delete $1'
结果如下:

$ git purge test
warning: deleting branch 'test' that has been merged to
         'refs/remotes/origin/test', but not yet merged to HEAD.
Deleted branch test (was 1316434).
error: dst ref refs/heads/test receives from more than one src.
error: failed to push some refs to 'git@github.com:testrepo/repo.git'
我已确认,如果我直接运行命令,此功能将正常工作:

$ git branch -d test && git push origin --delete test
warning: deleting branch 'test' that has been merged to
         'refs/remotes/origin/test', but not yet merged to HEAD.
Deleted branch test (was b610eca).
To git@github.com:testrepo/repo.git
 - [deleted]         test
编辑:

我最初的答案可能在大多数情况下都有效,但似乎位置参数
$1
的重复产生了奇怪的倍增效应

例如:

git config--global alias.foo'!echo$1&&echo$1'
吉特富酒吧
#酒吧
#酒吧
在这种情况下,旧方法似乎效果更好:

git config alias.purge '!f() { git branch -d $1 && git push origin --delete $1; }; f'
这种技术过去很常见,但现在已经很流行了

原始答案:

我的
~/.gitconfig
文件中有一个类似的别名。Mine不调用
sh
,它使用
&&
而不是
以确保第二个命令仅在第一个命令成功时运行

像这样的东西应该适合你:

[alias]
        purge = "git branch -d $1 && git push origin --delete $1"
使用git config:

git config alias.purge '!git branch -d $1 && git push origin --delete $1'

下面是使用后一个配置选项时出现的错误:“扩展别名'purge'失败;'!git branch-d$1&&git push origin--delete$1'不是git命令”。我对config命令特别感兴趣,因为我需要自动创建别名。@Jake,如果删除内部引号,例如,
git-config-alias.purge',该怎么办!git分支-d$1&&git push origin——删除$1'
?这更接近了-更新了我的问题。有机会的话,我会再做一些讨论,你肯定帮我找到了正确的方向。@Jake,我又做了一些测试,发现在两个命令中使用相同的位置参数(
$1
)时会产生奇怪的双重效果。看看这是否有效:
git config alias.purge'!f(){git branch-d$1&&git push origin--delete$1;};f'
。这似乎对我有好处。如果对你有效,我会更新我的答案。@Chris answer对我很有效。我创造了这个:'!f(){git branch$1&&git checkout$1;};它就像一个符咒