如何在Git中列出当前项目的所有日志?

4
我使用git log,但我发现它只能列出当前分支下的日志,而我想列出所有分支的所有日志并按修改日期排序,这有可能吗?如何做到?提前感谢!
2个回答

4
您可以查看此问题,以查看是否开始解决您的日志级别:
git log --graph --abbrev-commit --pretty=decorate --branches

它应该列出所有分支,包括远程分支(如果已获取)。

--branches[=pattern]

假设所有 refs/heads 中的引用都列在命令行中,如 <commit>
如果给定了模式,则限制分支匹配给定的 shell glob。
如果模式缺少 ?, , or [, / 则被隐含。
你可以尝试这个 commandline-fu 命令,使用 git branchgit branch -a:
git branch -a 当然是你需要看到与 gitk 相同的分支)
for k in `git branch -a|perl -pe s/^..//`;do echo -e `git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset%cn: %s" $k|head -n 1`\\t$k;done|sort -r

或者:

for k in `git branch -a|sed s/^..//`;do echo -e `git log -1 --pretty=format:"%Cgreen%ci %Cblue%cr%Creset%cn: %s" "$k"`\\t"$k";done|sort

(你可以完善格式以显示所需的所有数据--作者、提交消息等)

按日期显示git分支-对于显示活跃分支非常有用 打印出包括相对时间和颜色编码在内的分支的最后提交日期的列表。


注意:正如Jakub Narębski所适当地评论的:

不要为脚本使用git branch输出!!! 使用git for-each-refgit show-ref管道(用于脚本的低级命令)

git branch是一个瓷器命令,因为它是为用户而设计的,而不是为脚本而设计的。

正如Eric Raymond所说,它符合良好的git设计哲学,即将内容操作(管道)与表示(瓷器)分离。


4
不要在脚本中使用 git branch 命令输出!!! 请使用 git for-each-refgit show-ref 命令(用于脚本编写的低级命令)。 - Jakub Narębski
1
管道命令就像印尼地狱一样难以理解,要学习到能够编写回答简单问题的帮助程序,比如“树干净吗”,需要一年时间,即使这样,帮助程序最终也会超过200行代码。认为“人用瓷器,脚本用管道”这种想法忽略了一个事实,那就是编写脚本的是人。 - Szczepan Hołyszewski

1

git log --all


1
它肯定不能在远程机器上列出不同分支的日志,除非先将它们合并到当前分支中。你想让它列出哪些其他参考文献?git branch -a命令可以显示子集。 - Arafangion
1
该行为应由--all参数提供,如所述。请参阅git命令的文档。 (您期望看到的提交是否可能在噪音中丢失?还要记住,gitk也会查看索引)。 - Arafangion
你在开玩笑吗?我又尝试了一遍你的指令,但还是不起作用。我在刚修改的分支中错过了日志。 - MemoryLeak
但是在git gui中,它从主分支绘制了一个分支,所以我认为这是一个分支,有没有办法可以将主分支更新到先前的版本?就像svn update一样?(但不创建新的分支) - MemoryLeak
1
@MemoryLeak:要获取一个分离的HEAD,你需要在--all中包含HEAD:git log <other-options> --all HEAD - Chris Johnsen
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接