Git показывает все ветки (но не тайники) в журнале

85

У меня есть псевдоним Git, который расширяется до:

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

По словам man git logесть пара подозрительных вариантов: --notи --branches; но я не могу заставить его работать должным образом.

Как мне отредактировать это, чтобы скрыть тайники?


К вашему сведению : согласно принятому вопросу и комментарию, мой .gitconfigпсевдоним теперь выглядит так:

[alias]
    l = log --branches --remotes --tags --graph --oneline --decorate --notes HEAD
cYrus
источник

Ответы:

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.

5
источник
4
Обратите внимание, что порядок параметров имеет значение: --all --exclude=refs/stashвсе равно будет включать тайник, а --exclude=refs/stash --allправильно исключить его.
Михаил Бурштейн
4

Обратите внимание , что ответ Эндрю не будет работать для сокрытия 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 (" St acked Git ") предоставляет Git- подобную функциональность, подобную Quilt / mq (т. Е. Вставку / извлечение патчей в / из стека).

Якуб Наребски
источник
Рассмотрите возможность использования --exclude. Нравится:git log --graph --exclude=refs/heads/*.stgit --exclude=refs/patches/* --exclude=refs/stash --all
gavenkoa