Ответ 1
git log --graph
или gitk
. (Оба также принимают --all
, которые будут отображать все ветки вместо текущего.)
Edit:
Для имен ветвей и компактного представления попробуйте: git log --graph --decorate --oneline
Я играю с git изолированно на своей машине, и мне трудно поддерживать ментальную модель всех моих ветвей и совершает. Я знаю, что могу сделать git log
, чтобы увидеть историю фиксации, где я есть, но есть ли способ увидеть всю топографию отрасли, что-то вроде этих карт ascii, которые, кажется, используются повсюду для объяснения ветвей?
.-A---M---N---O---P
/ / / / /
I B C D E
\ / / / /
`-------------'
Просто кажется, что кто-то идет и пытается забрать мой репозиторий, будет сложно понять, что происходит.
Думаю, на меня влияет AccuRev поток браузера...
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).
Чтобы создать ярлык для этой команды, вы можете отредактировать файл ~/.gitconfig
:
[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"
Однако, как отмечает Sodel the Vociferous в комментариях, такую длинную команду форматирования трудно запомнить. Обычно это не проблема, так как вы можете поместить ее в файл ~/.gitconfig
. Однако, если вам иногда приходится регистрироваться на удаленном компьютере, где вы не можете изменить файл конфигурации, вы можете использовать более простую, но более быструю версию:
git log --graph --oneline
У меня есть 3 псевдонима (и 4 псевдонима для быстрого использования), которые я обычно ~/.gitconfig
файл ~/.gitconfig
:
[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
выглядит так:
Примечание. Ответ скопирован и улучшен после ответа по адресу fooobar.com/questions/8316/... поскольку он гораздо более уместен здесь, чем был там.Оставьте копию другого вопроса по историческим причинам - сейчас он закрыт, а на ответ ссылается куча других ответов.
В любой из этих рецептов (на основе 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 (Thu, 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 <[email protected]>
| Date: Sat Nov 14 13:42:20 2009 +0100
|
| a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <[email protected]>
| Date: Sat Nov 14 13:41:50 2009 +0100
|
| a first bug10 fix
|
gitk
отлично, но заставляет меня покинуть сеанс оболочки для другого окна, в то время как быстрое отображение последних n совершается быстро.
Взгляните на Gitkraken - кросс-платформенный графический интерфейс, который показывает топологию ясным способом.
Здесь вы найдете видеоурок о некоторых дополнительных функциях.
Gitg - отличный инструмент для Linux, похожий на Gitx для OS X. Просто запустите "gitg" в командной строке откуда-то внутри вашей древовидной структуры репозитория (то же самое с gitx).
Я нашел "git -big-picture" весьма полезным: https://github.com/esc/git-big-picture
Он создает довольно 2D-графики, используя dot/graphviz вместо довольно линейных, "одномерных" представлений gitk и друзей. С опцией -i он показывает точки ветвления и фиксирует коммиты, но оставляет все в промежутке.
Хорошим веб-инструментом является ungit. Он работает на любой платформе, поддерживаемой node.js и git. Существует видео о том, как он работает для тех, кто находит такие вещи проще, чем чтение...
Посмотрите BranchMaster.
Я написал его, чтобы визуализировать сложную структуру ветвей, свернув все коммиты между ними на одну строку. Цифры указывают количество коммитов.
Giggle рисует приятные графики
У Tortoise Git есть инструмент под названием "График ревизий". Если вы работаете в Windows, достаточно просто щелкнуть правой кнопкой мыши по вашему репозиторию → Tortoise Git → Revision Graph.
Я использую следующие псевдонимы.
[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
конфигурации log.graphColors
.
Что касается формата журналов, он похож на --oneline
, с добавлением имени автора (относительно .mailmap
) и относительной даты автора. Обратите внимание, что синтаксис %C(auto)
, который указывает Git использовать цвета по умолчанию для хэша коммита и т.д., Поддерживается в Git> = 1.8.3.
Для пользователей Mac: закажите (не каламбур) бесплатный инструмент с открытым исходным кодом GitUp: http://gitup.co/
Мне нравится способ отображения графиков, он понятнее, чем некоторые другие инструменты, которые я видел.
Проект находится здесь: https://github.com/git-up/GitUp
Я нашел это сообщение в блоге, которое показывает краткий путь:
git log --oneline --abbrev-commit --all --graph --decorate --color
Я обычно создаю псевдоним для вышеуказанной команды:
alias gl='git log --oneline --abbrev-commit --all --graph --decorate --color'
и просто используйте gl
.
или добавьте псевдоним в конфиг git. Откройте ~/.gitconfig
[alias]
lg = log --oneline --abbrev-commit --all --graph --decorate --color
и используйте это так: git lg
Для тех, кто использует текстовый редактор VSCode, рассмотрим расширение Git History от D. Jayamanne:
Gitx также является фантастическим инструментом визуализации, если вы оказались на OS X.
Мой личный псевдоним, через .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"
Другая команда git log. Этот с столбцами с фиксированной шириной:
git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short
Старый пост, но посмотрите SmartGit
. Это очень напоминает визуализацию ветвей Tortoise HG, и это бесплатно для некоммерческого использования.
В Windows есть очень полезный инструмент, который вы можете использовать: расширения git. Это инструмент gui и делает операции git очень легкими.
Также он открывается.
Я пробовал --simplify-by-decoration
, но все мои слияния не показываются. Поэтому я вместо этого просто обрезаю строки без символов "\" и "/" в заголовках, всегда сохраняя строки с "(" указание ветвей сразу после этого ". При отображении истории ветвей я вообще не заинтересован в комментариях коммита, поэтому Я также удаляю их. В итоге я получаю следующий псевдоним оболочки.
gbh () {
git log --graph --oneline --decorate "[email protected]" | grep '^[^0-9a-f]*[\\/][^0-9a-f]*\( [0-9a-f]\|$\)\|^[^0-9a-f]*[0-9a-f]*\ (' | sed -e 's/).*/)/'
}
мы можем сделать это более сложным?
Как насчет простого git log --all --decorate --oneline --graph (вспомните A Dog = --all - Decorate --oneline --Graph)
Официальный сайт Git привлек некоторые сторонние инструменты графического интерфейса платформы. Нажмите здесь Инструменты git GUI для платформы Linux
Я использовал gitg
и GitKraken
для платформы Linux. Оба хорошо, чтобы понять дерево коммитов