git别名删除本地和远程

bie*_*gel 14 git shell alias command git-alias

我正在尝试编写一个别名来同时删除本地和远程分支,但我无法弄清楚为什么语法不起作用.在~/.gitconfig,我尝试了以下别名,但每个产生相同的结果,这是意外的:

[alias]
     nuke = !sh -c 'git branch -D $1 && git push origin :$1'
Run Code Online (Sandbox Code Playgroud)

[alias]
     nuke = !git branch -D $1 && git push origin :$1
Run Code Online (Sandbox Code Playgroud)

两者都产生:

$> git branch
  * master
  mybranch
$> git nuke mybranch
Everything up-to-date
$> git branch
  * master
  mybranch
Run Code Online (Sandbox Code Playgroud)

切换命令的顺序会产生不同的结果,但也不完全是我正在寻找的:

[alias]
    nuke = !git push origin :$1 && git branch -D $1

...

$> git branch
  * master
  mybranch
$> git nuke mybranch
Everything up-to-date
Deleted branch mybranch (was d719895)
$> git branch
  * master
$> git push origin :mybranch
To git@github.com:biegel/repo.git
 - [deleted]         mybranch
Run Code Online (Sandbox Code Playgroud)

当我直接在shell上运行该命令时,它运行良好:

$> git branch
* master
  mybranch
$> git branch -D mybranch && git push origin :mybranch
Deleted branch mybranch (was d719895
To git@github.com:biegel/repo.git
 - [deleted]         mybranch
$> git branch
* master
Run Code Online (Sandbox Code Playgroud)

我已经尝试过创建一个别名~/.bashrc,使用git push origin --delete $1和使用shell函数,!f() { };似乎没有任何东西!

我准备放弃了.对我在这里缺少什么的想法?

谢谢.

Joh*_*ter 32

你可以让这项工作做得很好.您只需在定义的末尾添加缺少的" - ".在" - "将信号来砸所有选项处理完成,并且任何东西来后变成您可以通过引用一个参数$1,$2等等:

[alias]
     nuke = !sh -c 'git branch -D $1 && git push origin :$1' -
Run Code Online (Sandbox Code Playgroud)

从命令行切换到另一个分支,然后运行命令:

git nuke branch-name
Run Code Online (Sandbox Code Playgroud)

或者......如果你无法将上述添加到您的.gitconfig文件,因为某些原因,但有机会获得.bashrc,.bash_profile等等......你可以添加以下内容:

git config --global alias.nuke '!sh -c "git branch -D $1 && git push origin :$1" -'
Run Code Online (Sandbox Code Playgroud)