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

193

我需要从我们的远程代码库中删除旧的且无人维护的分支。我正在尝试找到一种按其最后修改日期列出远程分支的方法,但我找不到。

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


2
可能是重复的问题,参考如何按最近提交的顺序获取git分支列表? - Kristján
5
这里的答案质量远不如这个问题的Stack Overflow页面(https://dev59.com/wG435IYBdhLWcg3w1juV)上的回答。请参考那里的解答。 - Software Engineer
13个回答

0

这里有一个函数,您可以添加到bash_profile中,以使此操作更加便捷。

在Git仓库中使用:

  • branch 打印所有本地分支
  • branch -r 打印所有远程分支

函数:

branch() {
   local pattern="s/^..//"
   local arg=""
   if [[ $@ == "-r" ]]; then
      pattern="s/^..(.*?)( ->.*)?$/\1/"
      arg=" -r "
      echo '-r provided'
   fi
   for k in $(git branch $arg | perl -pe "$pattern"); do
      echo -e $(git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1)\\t$k
   done | sort -r
}

0

或者您可以使用我的PHP脚本,https://gist.github.com/2780984

#!/usr/bin/env php
<?php
    $local = exec("git branch | xargs $1");
    $lines = explode(" ", $local);
    $limit = strtotime("-2 week");
    $exclude = array("*", "master");
    foreach ($exclude as $i) {
        $k = array_search($i, $lines);
        unset($lines[$k]);
    }
    $k = 0;
    foreach ($lines as $line) {
        $output[$k]['name'] = $line;
        $output[$k]['time'] = exec('git log '.$line.' --pretty=format:"%at" -1');
        if ($limit>$output[$k]['time']) {
            echo "This branch should be deleted $line\n";
            exec("git branch -d $line");
        }
        $k++;
    }
?>

0
这是一种按日期排序并将分支名称放在日期之前的变体,我觉得更易读。
git branch -v --sort='-authordate:iso8601' --format='%(align:width=50)%(refname:short)%(end)%(authordate:relative)'

输出
upscale-zone-a-3                                  11 minutes ago
master                                            17 minutes ago
value-metric-type                                 2 days ago

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接