如何让git显示来自所有本地分支的最新n次提交

时间:2014-07-02 10:59:06

标签: git branch git-branch git-log

我想查看我的资源库中所有本地分支的最新n次提交(通常为1或2次)。

我试过“git log -1 --all”和“git log -1 --branches”,但这没有我在git 1.8.4中所期望的效果。

基本上我想要相当于

for i in $(ls .git/refs/heads/); do echo ====$i====; git log -1 $i; done

2 个答案:

答案 0 :(得分:4)

编辑,2018年8月:如果您只想查看每个分支提示中的一个提交,这里是一个快速的快捷方式:

git log --no-walk --branches

这种方法的工作原理是--no-walk阻止git log查看命令行中命名的任何提交,而--branches名称,命令行,每个分支提示。

--branches--tags--remotes选项也都采用可选的glob模式,因此您可以使用m*查看所有git log --no-walk --branches='m*'次提交例如。)


本地(即“非远程”)分支是那些引用名称以refs/heads/开头的分支。

git for-each-ref命令旨在迭代引用名称,因此通常使用它:

git for-each-ref --format='%(refname:short)' refs/heads

将它们全部打印出来。请注意,您不能只将它传递给git log -1,因为在从第一个引用中记录一个提交后,它将停止;所以你需要像你所做的那样。有很多方法可以构建它,例如:

git for-each-ref --format '%(refname:short)' refs/heads | \
    while read branch; do git log -1 $branch; done

或:

git for-each-ref --format='git log -1 %(refname:short)' refs/heads | sh

在第二种情况下,您应添加--shell以确保引用所有扩展。这可以防止例如名为foo$bar的分支。

答案 1 :(得分:0)

使用以下命令获取每个分支及其上次提交的列表:

git branch -vv

如果您想要更详细的内容或可变数量的提交,那么您自己的解决方案已经非常好了。您可以通过将以下内容添加到〜/ .gitconfig:

来为其创建git别名
[alias]                                                                         
    log-all-branches = "!sh -c 'git_dir="$(git rev-parse --show-toplevel)/.git/refs/heads/"; for i in $(ls $git_dir); do echo ====$i====; git log -n $1 $i; done' -"

现在,您可以通过执行git log-all-branches 2

来获取每个分支的最后2次提交