我想查看我的资源库中所有本地分支的最新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
答案 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