git 如果删除远程作为别名,则删除本地分支

git delete local branch if remote is deleted as alias

我是 git 的新手,我想为这个命令设置一个别名,但遇到了一些麻烦。

git fetch -p &&git branch -vv|grep ': gone]'|awk '{print }'|xargs git branch -D

这是此处问题的函数。 Remove local branches no longer on remote

该函数对我来说非常有用,但是当我尝试将它放入别名时,它运行但不起作用。任何建议将不胜感激。这就是它在我的配置中的样子。

[alias]
deletedone = "!f() { git fetch -p &&git branch -vv|grep ': gone]'|awk '{print }'|xargs git branch -D;}"

你只需要在别名的定义中添加"; f"

也就是说:

[alias] deletedone = "!f() { git fetch -p && git branch -vv | grep ': gone]' | awk '{print }' | xargs git branch -D; }; f"

或等同,运行命令:

git config alias.deletedone '!f() { git fetch -p && git branch -vv | grep '\'': gone]'\'' | awk '\''{print }'\'' | xargs git branch -D; }; f'

或使别名成为全局别名(独立于任何 repo):

git config --global alias.deletedone '!f() { git fetch -p && git branch -vv | grep ": gone]" | awk '\''{print }'\'' | xargs git branch -D; }; f'

编辑: 由于别名的原始版本不够健壮,如本 comment 中所指出的,我进行了一些调整,最终获得以下内容版本:

git config --global alias.deletedone '!f() { git fetch -p && git branch -vv | \
  perl -wne '\''print "\n" if m/^\s*(\S+)\s+[0-9a-f]+\s+\[\S+: gone\]/;'\'' | \
  xargs git branch -d; }; f'

您正在定义一个函数,但从未 运行 它。据我所知,根本不需要定义一个。

git config --global alias.deletedone '!bash -c "git fetch -p && git branch -vv | grep \': gone]\' | awk \'{print }\' | xargs git branch -D" -'

不是在我可以测试的计算机上,但它应该可以做你想做的事(可能某处存在语法错误)。

调用新的 bash 实例会在 git 外部调用时将其放入自己的范围内。当我不使用这种语法时,我遇到了奇怪的范围问题。