Вывод ветки git в виде дерева
Прямо сейчас, когда я набираю "git branch"
он перечисляет мои ветки в произвольном порядке.
Я бы предпочел бы, если бы "git branch" отобразило мой вывод в дереве, как fasion, somethign like:
master
|-- foo
|-- foo1
|-- foo2
|-- bar
|-- bar4
Здесь, где foo и bar были разветвлены от мастера; foo1 и foo2 были разветвлены от foo; bar4 был разветвлен от бара.
Легко ли это сделать?
[Утилиты командной строки. Это должно соответствовать моему рабочему процессу zsh/vim.]
Ответы
Ответ 1
В ответе ниже используется git log
:
Я упомянул аналогичный подход в 2009 году: Не удалось показать дерево Git в терминале:
git log --graph --pretty=oneline --abbrev-commit
Но полный, который я использовал, находится в "Как отобразить имя тега и имя ветки с помощью Git log -graph" (2011):
git config --global alias.lgb "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset%n' --abbrev-commit --date=relative --branches"
git lgb
Оригинальный ответ (2010)
git show-branch --list
близок к тому, что вы ищете (с порядком topo)
--topo-order
По умолчанию ветки и их фиксации отображаются в обратном хронологическом порядке. Этот параметр заставляет их отображаться в топологическом порядке (т.е. Фиксации потомков отображаются перед родителями).
Но инструмент git wtf может help too. Пример:
$ git wtf
Local branch: master
[ ] NOT in sync with remote (needs push)
- Add before-search hook, for shortcuts for custom search queries. [4430d1b] ([email protected]; 7 days ago)
Remote branch: origin/master ([email protected]:sup/mainline.git)
[x] in sync with local
Feature branches:
{ } origin/release-0.8.1 is NOT merged in (1 commit ahead)
- bump to 0.8.1 [dab43fb] ([email protected]; 2 days ago)
[ ] labels-before-subj is NOT merged in (1 commit ahead)
- put labels before subject in thread index view [790b64d] ([email protected]; 4 weeks ago)
{x} origin/enclosed-message-display-tweaks merged in
(x) experiment merged in (only locally)
NOTE: working directory contains modified files
git-wtf
показывает вам:
- Как ваша ветка относится к удаленному репо, если это ветка отслеживания.
- Как ваша ветка относится к ветвям, не относящимся к функции ( "версия" ), если это ветвь функции.
- Как ваша ветка относится к ветвям функций, если это ветка версии
Ответ 2
Это не совсем то, что вы просили, но
git log --graph --simplify-by-decoration --pretty=format:'%d' --all
выполняет довольно хорошую работу. Он также показывает теги и удаленные ветки. Это может быть нежелательно для всех, но я считаю это полезным. --simplifiy-by-decoration
- большой трюк здесь для ограничения приведенных ссылок.
Я использую аналогичную команду для просмотра моего журнала. Мне удалось полностью заменить его использование gitk
:
git log --graph --oneline --decorate --all
Я использую его, включив эти псевдонимы в файл ~/.gitconfig:
[alias]
l = log --graph --oneline --decorate
ll = log --graph --oneline --decorate --branches --tags
lll = log --graph --oneline --decorate --all
Изменить: Обновленная предлагаемая команда/псевдонимы для использования более простых флажков параметров.
Ответ 3
В следующем примере показаны родители-фиксаторы:
git log --graph --all \
--format='%C(cyan dim) %p %Cred %h %C(white dim) %s %Cgreen(%cr)%C(cyan dim) <%an>%C(bold yellow)%d%Creset'
Ответ 4
Вы можете использовать инструмент под названием gitk
.
Ответ 5
Проверено на Ubuntu:
sudo apt install git-extras
git-show-tree
Это дает эффект, похожий на два самых популярных ответа здесь.
Источник: http://manpages.ubuntu.com/manpages/bionic/man1/git-show-tree.1.html
Также, если у вас установлен arcanist, arc flow
показывает красивое дерево зависимостей вышестоящих зависимостей (то есть: которые были установлены ранее через arc flow new_branch
или вручную через git branch --set-upstream-to=upstream_branch
).
Бонусные хитрости:
Ответ 6
Для тех, кто использует Github, у них есть средство просмотра сети веток, которое кажется более легким для чтения