我需要从我们的远程存储库中删除旧的和未维护的分支。我试图找到一种方法来列出远程分支的最后修改日期,但我做不到。
有没有一种简单的方法来列出远程分支?
发布于 2010-03-25 17:24:41
commandlinefu有两个有趣的主张:
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 -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提到in the comments要求对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
如果你想把它添加到你的
中,下面的转义是必需的。
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'
注意:基于git for-each-ref refs/heads
的n8tr的answer更干净。And faster。
另请参阅"Name only option for git branch --list
?“
更广泛地说,tripleee会提醒我们in the comments
$(command substitution)
语法,而不是过时的反引号语法。(我在2014年用“What is the difference between $(command)
and `command`
in shell programming?”说明了这一点)
for
.git for-each-ref refs/remote
以获取机器可读格式的远程分支机构名称发布于 2014-01-23 17:49:38
下面是我使用的代码:
git for-each-ref --sort=-committerdate:iso8601 --format= %(committerdate:iso8601)%09%(refname) refs/heads
这是输出:
2014-01-22 11:43:18 +0100 refs/heads/master
2014-01-22 11:43:18 +0100 refs/heads/a
2014-01-17 12:34:01 +0100 refs/heads/b
2014-01-14 15:58:33 +0100 refs/heads/maint
2013-12-11 14:20:06 +0100 refs/heads/d/e
2013-12-09 12:48:04 +0100 refs/heads/f
对于远程分支,只需使用"refs/remotes“而不是”refs/head“:
git for-each-ref --sort='-committerdate:iso8601' --format=' %(committerdate:iso8601)%09%(refname)' refs/remotes
在n8tr's answer上构建,如果您还对分支上的最后一位作者感兴趣,并且如果您有可用的“列”工具,您可以使用:
git for-each-ref --sort='-committerdate:iso8601' --format='%(committerdate:relative)|%(refname:short)|%(committername)' refs/remotes/ | column -s '|' -t
这将为您提供:
21 minutes ago refs/remotes/a John Doe
6 hours ago refs/remotes/b Jane Doe
6 days ago refs/remotes/master John Doe
你可能想要调用"git fetch --prune“来获得最新的信息。
发布于 2014-05-30 06:20:41
在Olivier Croquette的基础上,我喜欢使用相对日期并缩短分支名称,如下所示:
git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads
它给出了输出:
21 minutes ago nathan/a_recent_branch
6 hours ago master
27 hours ago nathan/some_other_branch
29 hours ago branch_c
6 days ago branch_d
我建议创建一个Bash文件,用于添加您喜欢的所有别名,然后将该脚本共享给您的团队。下面是一个仅添加此示例的示例:
#!/bin/sh
git config --global alias.branches "!echo ' ------------------------------------------------------------' && git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads && echo ' ------------------------------------------------------------'"
然后,您可以这样做,以获得经过良好格式化和排序的本地分支列表:
git branches
https://stackoverflow.com/questions/2514172
复制相似问题