Невозможно показать дерево Git в терминале

440

Старая статья Killswitchcollective.com от 30 июня 2009 г. содержит следующие входные и выходные данные

git co master
git merge [your_branch]
git push

upstream    A-B-C-D-E            A-B-C-D-E-F-G
                 \        ---->               \
your branch       C-D-E                        G

Мне интересно, как вы получаете древовидное представление коммитов в вашем терминале без использования Gitk или Gitx в OS / X.

Как вы можете получить древовидное представление коммитов в терминале?

Лео Леопольд Герц 준영
источник
2
Это не важно для вопроса, но данная статья больше не доступна. Кэшированная копия доступна в интернет-архиве: web.archive.org/web/20110831142839/http://…
Алан Де Смет

Ответы:

796

Как вы можете получить древовидное представление коммитов в терминале?

git log --graph --oneline --all

хорошее начало

Вы можете получить несколько странных писем. Это коды ASCII для цветов и структуры. Чтобы решить эту проблему, добавьте к себе следующее .bashrc:

export LESS="-R"

так что вам не нужно использовать фильтр Tig's ASCII

git log --graph --pretty=oneline --abbrev-commit | tig   // Masi needed this 

Текстовый график статьи из Git-ready содержит другие опции:

git log --graph --pretty=oneline --abbrev-commit

Git log graph

Что касается статьи, которую вы упомянули, я бы ответил ответом Пода : специальная ручная работа.


Jakub Narębski упоминает в комментариях tig , основанный на ncurses интерфейс текстового режима для git. Смотрите их релизы .
Она добавила в --graphвариант еще в 2007 году.

VonC
источник
1
Я только что проверил это на своем репо. Это работает, но я на Windows с MSysGit1.6.3.
VonC
files.getdropbox.com заблокирован здесь на работе :( Я увижу вашу фотографию примерно через час, пора возвращаться домой.
VonC
@Vonc: теперь я набрал два для первой команды. Я получаю такой же вид, как на картинке для второй команды.
Лео Леопольд Герц 준영
9
Существует также tig, интерфейс текстового режима для git (использующий ncurses), который имел графическое представление истории в терминале до того, как появилась опция --graph для git-log.
Якуб Наребски
2
Я считаю, --decorateчто это необходимо и для такого рода отображения - оно показывает имена ссылок (ветви, удаленные и локальные) вместе с сокращенным именем коммита.
Мэтт Энрайт
312

Решение состоит в том, чтобы создать псевдоним в вашем .gitconfigи легко вызывать его:

[alias]
    tree = log --graph --decorate --pretty=oneline --abbrev-commit

И когда вы позвоните в следующий раз, вы будете использовать:

git tree

Чтобы поместить его в ~ / .gitconfig без необходимости его редактирования, вы можете сделать:

git config --global alias.tree "log --graph --decorate --pretty=oneline --abbrev-commit"  

(Если вы не используете --global, он поместит его в .git / config вашего текущего репо.)

Маруане Газанайи
источник
1
Как это не псевдоним по умолчанию? Я думаю, это сделало бы CLI Git немного менее раздражающим в использовании, и у нас не может быть этого ...
Тимммм
123
git log --oneline --decorate --all --graph

Визуальное дерево с именами ветвей.

Используйте это, чтобы добавить его как псевдоним

git config --global alias.tree "log --oneline --decorate --all --graph"

Вы называете это с

git tree

Git Tree

Себастьян Паттен
источник
2
Очень хороший, этот. Я использую его в сочетании с less -Sописанным здесь , чтобы не допустить запутывания обернутых линий в дереве.
DJVG
60

tig

Если вы хотите интерактивное дерево, вы можете использовать tig. Он может быть установлен brewна OSX и apt-getв Linux.

brew install tig
tig

Это то, что ты получаешь:

введите описание изображения здесь

Мохсен
источник
Можете ли вы получить такое дерево, как в ответе VonC от Tig в настоящее время? Мы используем Tig в ответе VonC только в качестве фильтра Ascii.
Лео Леопольд Герц 준영
4

Сокращая ваши команды, их будет легче запомнить:

git log --graph --oneline
JSON C11
источник
1

Я бы предложил любому записать полную команду

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

а не создавать псевдоним.

Хорошо, когда команды вводятся в вашу голову, так что вы знаете это наизусть, т.е. не зависите от псевдонимов при смене машины.

Саксофонист
источник
2
Это на самом деле git log --all --decorate --oneline --graph, после мнемоники git log a dog;)
VonC
@VonC Окончательный результат тот же. Во всяком случае, я согласен с вами. Спасибо за ответ.
саксофонист
Да, это то, что смайлик ;)в конце моего предыдущего комментария пытался (неумело) передать: вы можете использовать эту опцию в любом порядке. Я просто нахожу смешной "бревно" :)
VonC
1
Или вы могли бы scp ~/.bashrc root@remote:~/и ваши псевдонимы двигаться очень быстро.
Админы