Вихід гілки git у дереві, як мода


160

Прямо зараз, коли я набираю "гіт гіт"

він перераховує мої гілки в довільному порядку.

Що б я вважав за краще, якби "гіт гілки" перерахував мій результат у дереві, як fasion, щось таке:

master
|-- foo
  |-- foo1
  |-- foo2
|-- bar
  |-- bar4

Де тут, foo & bar були відгалужені від майстра; foo1 & foo2 були розгалужені від foo; bar4 був розгалужений від бруска.

Це легко здійснити?

[Тільки утиліти командного рядка. Це потрібно вписати в мій робочий процес zsh / vim.]


Жодна з відповідей тут (включена моя власна) не здається адекватним рішенням того, що я думаю, що ти насправді хочеш, і того, що я знаю, що хочу. Я буду писати нову утиліту, щоб вирішити це, коли отримаю можливість. Напевно, це назве git_tree. Тут буде виведено щось подібне arc flow: stackoverflow.com/questions/54227968/… . Можливо, колись я навіть можу злити його в git себе.
Габріель Степлес

Ця людина, схоже, хоче і те саме: reddit.com/r/git/comments/282c1f/…
Габріель

git log --graphдостатньо, я думаю.
DawnSong

Відповіді:


203

У відповіді нижче використовується git log:

Я згадав про подібний підхід у 2009 році з " Неможливо показати дерево Git в терміналі ":

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

Але повний, який я використовував, полягає в " Як відобразити ім'я тегу та ім'я гілки за допомогою журналу git --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-order

За замовчуванням гілки та їх комірки відображаються у зворотному хронологічному порядку.
Цей параметр змушує їх відображатися в топологічному порядку (тобто, нащадкові доручення показуються перед їх батьками).

Але також може допомогти інструмент git wtf . Приклад:

$ git wtf
Local branch: master
[ ] NOT in sync with remote (needs push)
    - Add before-search hook, for shortcuts for custom search queries. [4430d1b] (edwardzyang@...; 7 days ago)
Remote branch: origin/master (git@gitorious.org: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] (wmorgan-sup@...; 2 days ago)
[ ] labels-before-subj is NOT merged in (1 commit ahead)
    - put labels before subject in thread index view [790b64d] (marka@...; 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 показує вам:

  • Як ваша філія стосується віддаленого репо, якщо це гілка відстеження.
  • Як ваша філія стосується нефункціональних ("версій") гілок, якщо це галузь функцій.
  • Як ваша філія стосується галузей функцій, якщо це гілка версії

Ви використовували варіант вашого гарного формату, який також показує авторський електронний лист, використовуючи% ae. Крім того, я вважаю за краще називати псевдонім "sl", щоб нагадувати smartg hg.
fiorix

Дякую велике за посилання на git-wtfінструмент, це шалено корисно. Здається, по суті, руйнує висновки, які б я зробив, дивлячись на химерне git logдерево, але в приємному підсумку.
Люк Девіс

Я сподівався знайти спосіб, щоб у відділенні каси було показано, з якої гілки вона була перевірена
Чанг Чжао

@ChangZhao Це схоже на «знайти батьківську гілка», і це не так легко зробити: stackoverflow.com/a/3162929/6309 , stackoverflow.com/a/56452713/6309
VonC

147

Це не зовсім те, про що ви просили, але

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

Редагувати: оновлено запропоновану команду журналу / псевдоніми для використання більш простих прапорів опцій.


1
ІМО, це найкраща відповідь тут, але я думаю, що SourceTree або gitk або подібне - це шлях для подібних речей.
JaKXz

Це відображає гілки біля початку. Чи є спосіб відобразити це для місцевих відділень?
Джефф

@Jeff заміни --allна --branches --tags, ймовірно, це зробить.
nocash

ідеальна відповідь. Що я шукав, я знайшов тут. Чудово.
AMIC MING

12

Наступний приклад показує також відданих батьків:

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'

10

Можна скористатися інструментом під назвою gitk.


Я люблю gitk, але gitkв Mac не зрозумів . Якщо у вас є якісь пропозиції, будь ласка, повідомте мене про це. Я почав використовувати, Github Desktopале люблю працювати в командному рядку.
AMIC MING

6

Тестовано на Ubuntu:

sudo apt install git-extras
git-show-tree

Це дає ефект, подібний до двох найбільш схвалених відповідей тут.

Джерело: http://manpages.ubuntu.com/manpages/bionic/man1/git-show-tree.1.html


Крім того, якщо у вас встановлений арканіст (виправлення: вилка арканіста Uber встановлена ​​- див . Нижню частину цієї відповіді тут щодо інструкцій із встановлення), arc flowпоказує прекрасне дерево залежностей від залежних потоків (тобто: які були встановлені раніше через arc flow new_branchабо вручну через git branch --set-upstream-to=upstream_branch).

Бонусні трюки:

Пов'язані:

  1. Яка різниця між `дуговим трансплантатом` та` дуговим патчем`?

-1

Для тих, хто використовує Github, вони мають переглядач філійної мережі, який здається легшим для читання

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.