Git在日志中显示所有分支(但不隐藏)


84

我有一个Git别名,扩展为:

git log --graph --oneline --all --decorate

据称,man git log有两个可疑的选择:--not--branches; 但我无法使其正常运行。

我应该如何编辑以隐藏藏匿处?


仅供参考:根据已接受的问题评论,我的.gitconfig别名现在看起来像这样:

[alias]
    l = log --branches --remotes --tags --graph --oneline --decorate --notes HEAD

Answers:


125

不要做--all然后试图过滤掉隐藏物,不要一开始就将它们包括在内:

git log --branches --remotes --tags --graph --oneline --decorate

之后尝试过滤掉它们所引起的主要问题是,如果隐藏是该分支上的最新提交(因为即使不是该分支的提交head,它仍然是该分支的最新后代),它实际上可以过滤掉日志中的整个分支,这不是您想要的。


2
大!我想补充一下--tags
cYrus

我怀疑--tags是多余的,因为没有标签应该head是分支或远程站点的后代,尽管我尚未对此进行验证。
安德鲁·马歇尔

3
只是尝试这样做:git checkout -b test; 增加了一个承诺; git tag foo; git checkout master; git branch -D test。标签在那里,但没有它将不会显示--tags
cYrus

2
一小部分添加-您应该添加HEAD到末尾。否则,如果您处于分离的HEAD模式下,并且没有其他引用指向HEAD提交,则您不会在图形中看到它。
mziwisky

6

我的别名:

[alias]
    l = log --oneline --decorate --graph --exclude=refs/stash

在这种情况下,您将能够使用这些表单而无需显示隐藏信息:

  • git l 对于当前分支
  • git l feature234 对于特定的分支
  • git l --all 整体历史

从手册中:

--exclude = <全局模式>

不要包含与下一个--all,-branches,-tags,-remotes或--glob会考虑的匹配的引用。


4
请注意,参数的顺序很重要:--all --exclude=refs/stash仍将包含存储,而--exclude=refs/stash --all将其正确排除。
Mikhail Burshteyn

4

请注意,Andrew的答案不适用于隐藏StGit 1.)分支<branch>.stgit(来自StGit版本0.15),否则分支会乱丢输出,使其无法使用。

目前,我使用以下解决方案:

$ git log --graph --oneline --decorate \
  $(git for-each-ref --format="%(refname)" refs/heads/ refs/remotes/ |
    grep -v "\.stgit$")

1.) StGit( “ACKED GIT中”)提供了被子/ MQ -等功能GIT中(即,从一个堆入栈/出栈的补丁/)。


考虑使用--exclude。像:git log --graph --exclude=refs/heads/*.stgit --exclude=refs/patches/* --exclude=refs/stash --all
Givenkoa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.