我需要从我们的远程存储库中删除旧的和未维护的分支。我正在尝试找到一种方法来按远程分支的最后修改日期列出远程分支,但我做不到。
有没有一种简单的方法可以以这种方式列出远程分支?
commandlinefu有 2 个有趣的命题:
for k in $(git branch | perl -pe s/^..//); do echo -e $(git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1)\\t$k; done | sort -r
或者:
for k in $(git branch | sed s/^..//); do echo -e $(git log --color=always -1 --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k --)\\t"$k";done | sort
这是针对本地分支的,采用 Unix 语法。使用git branch -r,您可以类似地显示远程分支:
git branch -r
for k in $(git branch -r | perl -pe 's/^..(.*?)( ->.*)?$/\1/'); do echo -e $(git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1)\\t$k; done | sort -r
Michael Forrest在评论中提到zsh 需要对sed表达式进行转义:
sed
for k in git branch | perl -pe s\/\^\.\.\/\/; do echo -e git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1\\t$k; done | sort -r
如果您想将它添加到您的 zshrc 中,则需要以下转义。
alias gbage='for k in $(git branch -r | perl -pe '\''s/^..(.*?)( ->.*)?$/\1/'\''); do echo -e $(git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1)\\t$k; done | sort -r'
在多行中:
alias gbage='for k in $(git branch -r | \ perl -pe '\''s/^..(.*?)( ->.*)?$/\1/'\''); \ do echo -e $(git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | \ head -n 1)\\t$k; done | sort -r'
注意:,基于gitfor-each-ref refs/heads更清洁。而且速度更快。
gitfor-each-ref refs/heads
比过时的反引号语法更喜欢现代$(command substitution)语法。 不要阅读带有for. 可能切换到git for-each-ref refs/remote以机器可读格式获取远程分支名称
比过时的反引号语法更喜欢现代$(command substitution)语法。
$(command substitution)
不要阅读带有for.
for
git for-each-ref refs/remote