Показує ієрархію гілок у командному рядку?


82

Мені цікаво, чи є спосіб показати ієрархію гілок у командному рядку? Наприклад, якщо я використовую git branch, замість того, щоб бачити такий вивід:

* master
joes_work
refactoring
experiment

Ви бачите такий вивід:

* master
    joes_work
    refactoring
        experiment

Таким чином легко зрозуміти, яка гілка певної гілки .. відгалужена. Навіть якщо немає конкретної команди, яка виводить деревоподібну структуру, чи існує команда, яка виводить інформацію про те, яка гілка прийшла з якої гілки? Я можу використовувати скрипт perl для форматування результату.


Питання не має нічого спільного з відносинами між комітами та філіями. Ви можете мати 5 гілок, спрямованих на непов’язані коміти, які, тим не менше, утворюють графік з точки зору їх гілки вище. Я не думаю, що існує спосіб отримати відповідь із git cli.
Тодд Фрід

Відповіді:


117

Рішення sehe виглядає чудово, ось ще одне, яке, схоже, містить схожу інформацію, відформатоване по-різному, воно використовує git log, тому містить і інформацію про коміти (ігноруйте імена гілок, я їх якось переплутав!):

git log --all --graph --decorate --oneline --simplify-by-decoration

* ae038ad (HEAD, branch2-1) add content to tmp1
| * f5a0029 (branch2-1-1) Add another
|/  
* 3e56666 (branch1) Second wave of commits
| * 6c9af2a (branch1-2) add thing
|/  
* bfcf30a (master) commit 1

Так - я насправді віддаю перевагу цьому, тому що це більш гнучко, але друкувати з мого телефону було б боляче - плюс, швидше за все, це було б трохи надмірно для ОП
sehe

2
@sehe: ви можете зробити це псевдонімом. У мене є подібний псевдонім журналу git, який дуже приємний, і я псевдонім це до lg, так що git lg.
Хорхе Ізраїль Пенья

Завдяки ctcherry, це дійсно корисно (мені це потрібно вдруге). Я б дав вам ще один голос, якби міг.
Рокі Сімс,

5
Приємно! Я використовую те, git config --global alias.tree 'log --all --graph --decorate --oneline --simplify-by-decoration'що дає мені git tree.
chetbox

29

Спробуйте

git show-branch
git show-branch --all

Приклад виводу:

bash$ git show-branch --all
! [branchA] commitA only in branchA
 * [branchB] commitB
  ! [branchC] commitC only in branchC
---------------------
+   [branchA] commitA only in branchA 
 *  [branchB] commitB
  + [branchC] commitC only in branchC
 *+ [branchC~1] commitB-1 also in branchC
 *+ [branchC~2] commitB-2 also in branchC
+++ [branchC~3] common ancestor
+++ [branchC~4] more common ancestors

4
git show-branchпоказує коміти у гілках, а не лише список гілок.
svick

1
Я не впевнений, що це те, що я шукаю. Здається, це показує коміти у гілках, але те, що я шукаю, це спосіб побачити вид дерева на всі гілки.
mellowsoon

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

25

Я хочу доповнити відповідь @ctcherry.

Мені подобається, коли я також бачу користувача, який здійснив фіксацію та дату, тому слід використовувати такий рядок:

git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

Однак це досить довгий рядок, який важко запам’ятати, тому ви можете використовувати псевдонім. Вам просто потрібно використовувати це у своєму терміналі:

git config --global alias.lg "HERE GOES MY BIG LOG COMMAND LINE"


Щоб підсумувати, скопіюйте та вставте рядок нижче на ваш термінал:

git config --global alias.lg "log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

Тоді вам просто потрібно буде скористатися git lgдля отримання дерева історії журналів.

Приклад: введіть тут опис зображення

src


1
Дякуємо за те, що ви дали колір на відповідь!
dsz

13

Просто введіть gitkcommand і натисніть клавішу Enter.

Для мене gitkце найпростіше рішення для цього. Хоча він не буде відображати вам командний режим, він автоматично заповнить такий приємний інтерфейс, як це:

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


5

Не так працюють гілки з точки зору git. Якщо я роблю якісь коміти до гілки a, створюю bз неї гілку , працюю там, а потім знову виконую іншу роботу a:

A -- B -- D <-- a
       \
        \
          C <-- b

Це неможливо відрізнити, якщо ви зробили це навпаки:

A -- B -- C <-- b
       \
        \
          D <-- a

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


Чи знаєте ви, чи стосується це файлів у .git / logs / refs / heads? Там є файл для кожної гілки, і перший рядок на гілці говорить про те, з якої гілки ця гілка походить.
mellowsoon

-2

Як щодо цього псевдоніма для вашого .gitconfig:

[alias]
branch-tree = !cd "$(git rev-parse --git-dir)/refs/heads" && tree

Ви також можете вказати параметри, залежно від того, що treeпідтримує ваша команда, наприклад, -Dдля позначок часу.


1
Це просто погана версія git branch. Запитання вимагає чогось, що показує ієрархію гілок - що відгалужує гілку, тощо ...
Duncan Lock
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.