Визуализация топологии ветвей в git
Я играю с git в изоляции на своей собственной машине, и мне трудно поддерживать ментальную модель всех моих ветвей и коммитов. Я знаю, что могу сделать git log
чтобы увидеть историю фиксации с того места, где я нахожусь, но есть ли способ увидеть всю топографию ветвей, что-то вроде этих карт ascii, которые, похоже, используются везде для объяснения ветвей?
.-A---M---N---O---P
/ / / / /
I B C D E
/ / / /
`-------------'
просто кажется, что кто-то идет и пытается забрать мой репозиторий будет трудно работать именно то, что происходило.
Я думаю, что я под влиянием AccuRev это браузер трансляция...
28 ответов
git log --graph
или gitk
. (Оба также принимают --all
, который покажет все ветви вместо только текущего.)
Edit:
Для имен ветвей и компактного представления попробуйте: git log --graph --decorate --oneline
Я обычно использую
git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"
С цветами (если ваша оболочка Bash):
git log --graph --full-history --all --color \
--pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"
выводит текстовое представление такой:
* 040cc7c (HEAD, master) Mannual is NOT built by default
* a29ceb7 Removed offensive binary file that was compiled on my machine and was hence incompatible with other machines.
| * 901c7dd (cvc3) cvc3 now configured before building
| * d9e8b5e More sane Yices SMT solver caller
| | * 5b98a10 (nullvars) All uninitialized variables get zero inits
| |/
| * 1cad874 CFLAGS for cvc3 to work succesfully
| * 1579581 Merge branch 'llvm-inv' into cvc3
| |\
| | * a9a246b nostaticalias option
| | * 73b91cc Comment about aliases.
| | * 001b20a Prints number of iteration and node.
| |/
|/|
| * 39d2638 Included header files to cvc3 sources
| * 266023b Added cvc3 to blast infrastructure.
| * ac9eb10 Initial sources of cvc3-1.5
|/
* d642f88 Option -aliasstat, by default stats are suppressed
(вы можете просто использовать git log --format=oneline
, но он будет привязывать сообщения фиксации к номерам, что выглядит менее красиво IMHO).
чтобы сделать ярлык для этой команды, вы можете изменить свой :
[alias]
gr = log --graph --full-history --all --color --pretty=tformat:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s%x20%x1b[33m(%an)%x1b[0m"
, а Содель громогласный заметки в комментарии, такие длинные команды форматирования трудно запомнить. Обычно это не проблема, поскольку вы можете поместить ее в . Однако, если вам иногда приходится входить в систему на удаленной машине, где вы не можете изменить файл конфигурации, вы можете использовать более простой, но быстрый тип version:
git log --graph --oneline
2¢: у меня 3 псевдонима (и 4 псевдонима-Псевдонимы для быстрого использования) что я обычно бросаю в мой :
[alias]
lg = !"git lg1"
lg1 = !"git lg1-specific --all"
lg2 = !"git lg2-specific --all"
lg3 = !"git lg3-specific --all"
lg1-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)'
lg2-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
lg3-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset) %C(bold cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)%n'' %C(white)%s%C(reset)%n'' %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'
git lg
/git lg1
выглядит так:
git lg2
выглядит так:
и git lg3
выглядит так:
Примечание: ответ скопирован и улучшен после ответа на stackoverflow.com/questions/1057564/pretty-git-branch-graphs поскольку здесь это гораздо более уместно, чем там. Оставил копию на другом вопросе по историческим причинам-теперь он закрыт, и на ответ ссылается куча других ответов.
к любому из этих рецептов (на основе git log или gitk), вы можете добавить --simplify-by-decoration
свернуть неинтересные линейные части истории. Это делает гораздо больше топологии видимой сразу. Теперь я могу понять большие истории, которые были бы непонятны без этого варианта!
Я почувствовал необходимость опубликовать это, потому что это, похоже, не так хорошо известно, как должно быть. Он не появляется в большинстве вопросов переполнения стека о визуализации истории, и мне потребовалось довольно много поисков-даже после того, как я понял, что мне это нужно! Я, наконец, нашел его в этом отчет об ошибке Debian. Первое упоминание о переполнении стека, похоже,ответ Антуан Пелиссье.
Gitk
иногда мне больно читать.
мотивировать меня писать GitVersionTree.
"99.999% моего времени просмотр истории git lg
и 0.001% - это git log
"
просто хочу поделиться 2 псевдонимами журнала, которые могут быть полезны. (настройка от .gitconfig хранит настройки)
[Alias]
lg = log --graph --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
hist = log --graph --full-history --all --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
-
git lg
будет отображаться текущая история филиала. -
git hist
будет видеть всю историю филиала.
мне нравится, с git log
чтобы делать:
git log --graph --oneline --branches
(также с --all, для просмотра удаленных ветвей)
работает с последними выпусками Git: введено С 1.6.3 (Чт, 7 Мая 2009)
"
--pretty=<style>
" опция для семейства команд журнала теперь может быть записана как"--format=<style>
".
Кроме того,--format=%formatstring
это короткая рука для--pretty=tformat:%formatstring
."
--oneline
" является синонимом "--pretty=oneline --abbrev-commit
".
PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
| | * 8183707 a first bug10 fix
| |/
| * e727105 a second evol for 2.0
| * 473d44e a main evol
|/
* b68c1f5 first evol, for making 1.0
вы также можете ограничить диапазон отображения журнала (количество коммитов):
PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all -5
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
(показать только последние 5 коммитов)
что мне не нравится в текущем выбранном решении:
git log --graph
он отображал слишком много информации (когда я хочу только посмотреть на быстрый резюме):
PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC <vonc@laposte.net>
| Date: Sat Nov 14 13:42:20 2009 +0100
|
| a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <vonc@laposte.net>
| Date: Sat Nov 14 13:41:50 2009 +0100
|
| a first bug10 fix
|
gitk
отлично, но заставляет меня оставить сеанс оболочки для другого окна, тогда как отображение последних N коммитов быстро достаточно часто.
посмотри Gitkraken - кросс-платформенный GUI, который показывает топологию в ясном виде.
здесь видео уроке о некоторых дополнительных функциях.
Gitg - отличный инструмент для Linux, похожий на Gitx для OS X. просто запустите "gitg" в командной строке откуда-то из древовидной структуры вашего репозитория (то же самое с gitx).
Я нашел "git-big-picture" довольно полезным:https://github.com/esc/git-big-picture
Он создает довольно 2D-графики, используя dot / graphviz вместо довольно линейных, "одномерных" представлений gitk и friends. С параметром-i он показывает точки ветви и коммиты слияния, но оставляет все между ними.
посмотреть BranchMaster.
Я написал это, чтобы визуализировать сложную структуру ветви, свернув все коммиты между ними в одну строку. Числа указывают количество коммитов.
Черепаха Git имеет инструмент под названием "график ревизий". Если вы находитесь в Windows, это так же просто, как щелкнуть правой кнопкой мыши на вашем РЕПО --> Tortoise Git --> график пересмотра.
Я использую следующие псевдонимы.
[alias]
lol = log --graph --decorate --pretty=oneline --abbrev-commit
lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
Он имеет больше информации в цветовой гамме, чем псевдонимы, которые я видел выше. Это также кажется довольно распространенным явлением, поэтому у вас может быть шанс, что он существует в окружении другого или может упоминать его в разговоре, не объясняя его.
со скриншотами и полным описанием здесь: http://blog.kfish.org/2010/04/git-lola.html
никто не упомянул tig
? Он не складывает ветви, как "BranchMaster", но...
это быстро, работает в терминале.
потому что это так быстро (+управление с клавиатуры) вы получаете большой UX,
это почти как мой"ls
" для каталогов, содержащих репозитории git.
Он имеет обычные ярлыки,/
в поиск и т. д.
(ps. это терминал на фоне этого скриншота выглядит лучше в наши дни, но мой компьютер отказывается делать скриншот, извините)
(pps. Я также использую gitkraken и имею действительно четкие визуализации, но он намного тяжелее, чем tig
)
у меня есть это git log
псевдоним ~/.gitconfig
для просмотра истории графика:
[alias]
l = log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'
С псевдонимом на месте, git l
покажет что-то вроде этого:
В Git 2.12+ вы даже можете настроить цвета линий графика с помощью log.graphColors
опции настройки.
Что касается формата журналов, он похож на --oneline
, С добавлением имя автора (уважая .mailmap
) и относительная дата автора. Обратите внимание, что %C(auto)
синтаксис, который говорит Git использовать цвета по умолчанию для хэша фиксации и т. д. поддерживается в Git >= 1.8.3.
нашел этот блог который показывает в краткой форме:
git log --oneline --abbrev-commit --all --graph --decorate --color
Я обычно создаю псевдоним для вышеуказанной команды:
alias gg='git log --oneline --abbrev-commit --all --graph --decorate --color'
и просто использовать gg
.
мой личный любимый псевдоним, via .gitconfig хранит настройки, это:
graph = log --graph --color --all --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"
для пользователей Mac, checkout (без каламбура) бесплатный инструмент с открытым исходным кодом GitUp:http://gitup.co/
Мне нравится, как показаны графики, это яснее, чем некоторые другие инструменты, которые я видел.
проект здесь:https://github.com/git-up/GitUp
старый пост, но проверить SmartGit
. Это очень напоминает визуализацию ветви черепахи HG, и она бесплатна для некоммерческого использования.
другая команда журнала git. Этот с столбцы фиксированной ширины:
git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short
для тех, кто использует текстовый редактор VSCode рассмотрим Расширение Истории Git by D. Jayamanne:
в Windows есть очень полезный инструмент, который вы можете использовать: расширения git. Это инструмент gui и делает операции git очень легкими.
также это с открытым исходным кодом.
Я пробовал --simplify-by-decoration
но все мои слияния не отображаются. Поэтому я вместо этого просто обрезаю строки без символов " \ " и " / "в заголовках, всегда сохраняя строки с" ( " , указывающие ветви сразу после этого. При показе истории ветвей я вообще не заинтересован в комментариях фиксации, поэтому я их тоже удаляю. Я получаю следующий псевдоним оболочки.
gbh () {
git log --graph --oneline --decorate "$@" | grep '^[^0-9a-f]*[\/][^0-9a-f]*\( [0-9a-f]\|$\)\|^[^0-9a-f]*[0-9a-f]*\ (' | sed -e 's/).*/)/'
}
git официальный сайт завербовал некоторые сторонние платформы конкретных инструментов GUI. Нажмите здесь Git GUI инструменты для платформы Linux
я использовал gitg
и GitKraken
для платформы linux. Оба хорошо понимают дерево фиксации
можем ли мы сделать это более сложным?
Как насчет простой войдите в Git --все --украшения --короткая --графика (вспомните собаку = --все --украшения --короткая --графика)