【问题标题】:How to get git to display the most recent n commits from all local branches如何让 git 显示来自所有本地分支的最新 n 次提交
【发布时间】:2014-08-23 03:26:54
【问题描述】:

我想查看我的存储库中所有本地分支的最近 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

【问题讨论】:

  • 你已有的解决方案有什么问题?
  • 你为什么不用它做一个别名呢?
  • 如果“活动分支”的意思是“那些其 refs 没有被移动到 packed-refs 或从那时起被更新的那些”,以上或多或少是要走的路。不过,您可能想添加一些东西来处理带有嵌入式斜杠的分支名称。
  • @chris :现有的解决方案依赖于我作为存储库的根文件夹。我想要一种从任何地方进行的方法。此外,如果我使用本机 git 工具,我可以传递其他命令行参数以获得更强大的功能。如果我尝试编写一个脚本来完成所有这些,它很快就会变得复杂,我最好花时间学习如何使用已经可用的东西(假设存在一些东西)。
  • @Chris 如果分支名称中有斜线,则根本不起作用。

标签: git branch git-branch git-log


【解决方案1】:

可以通过以下方式获取每个分支及其最后一次提交的列表:

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 次提交

【讨论】:

  • 这是一个好的开始,但是 OP 关于必须位于根目录中的观点是一个好的开始。您可能想要合并git rev-parse --git-dir
  • 感谢您指出。在 OP 在 cmets 中针对他的问题指定了这一点后,我已经在我的回答中调整了该命令。
【解决方案2】:

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

git log --no-walk --branches

它的工作方式是 --no-walk 阻止 git log 查看任何在命令行上命名的提交,而 --branches 在命令行上命名每个分支-提示提交。

--branches--tags--remotes 选项也都采用可选的 glob 模式,因此您可以查看所有带有 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 的分支。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多