Отображение иерархии веток в командной строке?
Мне любопытно, есть ли способ показать иерархию веток в командной строке? Например, если я использую git branch
вместо того, чтобы видеть вывод следующим образом:
* master
joes_work
refactoring
experiment
Вы видите вывод следующим образом:
* master
joes_work
refactoring
experiment
Таким образом, легко увидеть, какая ветвь имеет определенную ветвь. Даже если нет конкретной команды, которая выводит древовидную структуру, есть ли команда, которая выводит информацию о том, какая ветвь пришла из какой ветки? Я могу использовать perl script для форматирования вывода.
Ответы
Ответ 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
для временных меток.