sle*_*ske 25 git branch git-branch
我有时使用包含许多分支的源代码存储库,其中大多数分支都是旧的,通常不再相关.
在这些情况下,完整的分支列表git branch
不是很有帮助.有没有办法只列出"活跃"分支?例如,只有在过去n天内收到提交的分支?理想情况下,列表将包括每个分支的最后提交日期,并指示分支是否已完全合并.
PS:我意识到这也可以通过删除"旧"分支来解决(例如,如何处理实验性非合并git分支?),但这可能并不总是实际的或在给定项目上被接受.
Mic*_*ski 32
您可以使用git-for-each-ref获取所有本地和跟踪分支的列表,这些分支按上次提交的提交者日期的降序排序,如下所示:
git for-each-ref --sort=-committerdate --format='%(committerdate:short) %(refname)' refs/heads refs/remotes
Run Code Online (Sandbox Code Playgroud)
这输出例如:
2012-06-23 refs/heads/master
2012-06-21 refs/remotes/origin/HEAD
2012-06-21 refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)
你可以添加--count=m
到最多m个分支,你可以--sort=-authordate
代替使用提交者日期,你当然可以使用不同的格式.for-each-ref
本身并没有按日期限制结果,这必须单独编写脚本,但至少你手头有提交对象的日期.
ls -1 --sort=time .git/refs/heads/ | while read b; do PAGER='' git log -n1 --color --pretty=format:'%C(yellow)%d%Creset - %Cred%h%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset%n' --abbrev-commit $b --; done;
Run Code Online (Sandbox Code Playgroud)
此oneliner打印所有本地分支,按时间从最新到最旧排序.每个分支最后一次提交人类可读日期字符串.你可以把它添加到你的.gitconfig
.
对于远程分支我想出了这个令人毛骨悚然的解决方案
git ls-remote -h origin | while read b; do PAGER='' git log -n1 --color --pretty=format:'%ct%C(yellow)%d%Creset - %Cred%h%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset%n' --abbrev-commit $( echo $b | cut -d' ' -f1 ) --; done | sort -rn -k1,10 | cut -c11-
Run Code Online (Sandbox Code Playgroud)
编辑:我认为越多,我担心这可能是不可靠的,因为ls-remote
总是连接到远程端而log
不是.fetch
在每次运行此命令之前可能需要执行此操作.