我希望能够查看我的代码库中所有本地分支的最新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
我希望能够查看我的代码库中所有本地分支的最新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
编辑,2018年8月:如果您只想查看每个分支最新提交中的一个,这里有一个快捷方式:
git log --no-walk --branches
--no-walk
选项可以防止git log
查看任何未在命令行上指定名称的提交记录,而--branches
选项则在命令行上指定每个分支尖端提交记录的名称。--branches
、--tags
和--remotes
选项都可以使用可选的通配符模式,因此您可以使用git log --no-walk --branches='m*'
来查看所有以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
的分支等问题。通过使用以下命令可以获取包含所有分支及其最后提交的列表:
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个提交。git rev-parse --git-dir
纳入考虑。 - Chris