小编典典

在 Git 中列出每个分支及其最后修订的日期

all

我需要从我们的远程存储库中删除旧的和未维护的分支。我正在尝试找到一种方法来按远程分支的最后修改日期列出远程分支,但我做不到。

有没有一种简单的方法可以以这种方式列出远程分支?


阅读 90

收藏
2022-08-21

共1个答案

小编典典

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,您可以类似地显示远程分支:

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表达式进行转义:

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更清洁。而且速度更快。

  • 比过时的反引号语法更喜欢现代$(command substitution)语法。

  • 不要阅读带有for.

  • 可能切换到git for-each-ref refs/remote以机器可读格式获取远程分支名称
2022-08-21