Подтвердить что ты не робот

Отображение иерархии веток в командной строке?

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

* master
joes_work
refactoring
experiment

Вы видите вывод следующим образом:

* master
    joes_work
    refactoring
        experiment

Таким образом, легко увидеть, какая ветвь имеет определенную ветвь. Даже если нет конкретной команды, которая выводит древовидную структуру, есть ли команда, которая выводит информацию о том, какая ветвь пришла из какой ветки? Я могу использовать perl script для форматирования вывода.

4b9b3361

Ответ 1

Решение

sehe выглядит великолепно, вот еще один, который, похоже, содержит подобную информацию, отформатирован по-разному, он использует журнал git, поэтому он также содержит информацию о фиксации (игнорируйте имена ветвей, я их испортил!)

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

Ответ 2

Try

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

Ответ 3

Это не то, как ветки работают с точки зрения git. Если я сделаю некоторые коммиты для ветки a, создайте ветку b из нее, работайте там, а затем выполните другую работу на a:

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

Это неотличимо, если вы сделали это наоборот:

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

Единственный способ, с помощью которого я могу узнать, из какой ветки возникла какая-то ветвь, является reflog, но эта ненадежность (записи старше 90 дней обычно удаляются).

Ответ 4

Для меня gitk - это самое простое решение для этого. Хотя он не покажет вам командный режим, он автоматически заполнит приятный интерфейс так:

enter image description here

Ответ 5

Я хочу завершить ответ @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 чтобы получить дерево истории логов.

Пример: enter image description here

ЦСИ

Ответ 6

Как насчет этого псевдонима для вашего .gitconfig:

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

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