git别名删除本地和远程

时间:2013-05-24 17:10:24

标签: git shell command alias git-alias

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

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

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

两者都产生:

$> git branch
  * master
  mybranch
$> git nuke mybranch
Everything up-to-date
$> git branch
  * master
  mybranch

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

[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

当我直接在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

我尝试在~/.bashrc中创建别名,使用git push origin --delete $1并使用!f() { };的shell函数,似乎没有任何内容!

我准备放弃了。关于我在这里缺少什么的想法?

感谢。

2 个答案:

答案 0 :(得分:31)

你可以让这项工作做得很好。您只需在定义的末尾添加缺少的“ - ”。 ' - '将表示所有选项处理都已完成,之后的任何内容都会成为您可以通过$1$2等引用的参数:

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

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

git nuke branch-name

或者......如果由于某种原因无法将上述内容添加到.gitconfig文件中,但可以访问.bashrc.bash_profile等,则可以添加以下内容:

git config --global alias.nuke '!sh -c "git branch -D $1 && git push origin :$1" -'

答案 1 :(得分:0)

您不能在别名中使用$1。在路径中的某个位置创建一个名为git-nuke的脚本,以便您可以访问正确的shell脚本。

您也可以安装git-extras。这是一个包含git delete-branch脚本的脚本编译,它完全符合您的要求。