Я хочу получить список всех веток в Git-репозитории с «самыми свежими» ветвями вверху, где «самая свежая» ветвь - это та, которая была зафиксирована совсем недавно (и, следовательно, с большей вероятностью будет одной Хочу обратить внимание)
Есть ли способ, которым я могу использовать Git, чтобы (а) отсортировать список ветвей по последнему коммиту или (б) получить список веток вместе с датой последнего коммита, в каком-то машиночитаемом формате?
В худшем случае я всегда мог запустить, git branch
чтобы получить список всех ветвей, проанализировать его выходные данные, а затем git log -n 1 branchname --format=format:%ci
для каждой из них получить дату фиксации каждой ветви. Но это будет работать на Windows-боксе, где ускорение нового процесса является относительно дорогим, поэтому запуск исполняемого файла Git один раз на ветку может замедлиться, если имеется много ветвей. Есть ли способ сделать все это с помощью одной команды?
источник
git for-each-ref
от Jakub Narębski: вы можете получить удаленные ветви, проходящиеrefs/remotes/
вместоrefs/heads/
(или вы можете передать оба, разделенные пробелами );refs/tags/
для тегов, или толькоrefs/
для всех трех видов.for-each-ref
! Вы будете использовать напрямуюgit branch --sort=-committerdate
: см. Мой ответ нижеОтветы:
Используйте
--sort=-committerdate
опциюgit for-each-ref
;Также доступно с Git 2.7.0 для
git branch
:Основное использование:
Результат:
Расширенное использование:
Результат:
источник
--format=%(refname)
.git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname) %(committerdate) %(authorname)' | sed 's/refs\/heads\///g'
:shortname
?git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/
. Страница руководства git-for-each-ref (1) гласит: « Для недвусмысленного краткого названия ссылки на приложение:short
.[alias]
разделе, и мне это нравится.br = for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'
Список имен веток Git, упорядоченный по последним коммитам…
Расширяя ответ Якуба и подсказку Джо , следующее исключит «refs /heads», поэтому в выводе будут отображаться только имена ветвей:
Команда:
Результат:
источник
--format=%(refname:short)
вместо того, чтобы полагаться наcut
.git rb
забытьgit config --global alias.rb "for-each-ref --count=20 --sort=-committerdate refs/heads/ --format=\'%(refname:short)\'"
git branch
, так что получение локальной, удаленной или всех веток работает как в git-branch (то есть -r, -a).git branch -r --sort=committerdate --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'
Вот оптимальный код, который объединяет два других ответа:
источник
git for-each-ref --sort=-committerdate refs/heads/ --format='%(committerdate:short) %(authorname) %(refname:short)'
Вот простая команда, которая перечисляет все ветви с последними коммитами:
Чтобы упорядочить по последнему коммиту, используйте
Источник: http://git-scm.com/book/en/Git-Branching-Branch-Management
источник
git branch -av
если вы хотите увидеть нелокальные ветви тоже.git branch -v
указанную дату каждого коммита?git branch -va --sort=-committerdate
показывать нелокальные ветви с самыми последними измененными ветками вверху.Я использую следующий псевдоним:
recent = "!r(){git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)'|column -ts'|'}; r"
который производит:
Используйте '|' разделять.
источник
column -ts'|'
и символы конвейера, если запятая может встречаться в относительных временных метках в вашем регионе.'%(HEAD) ...'
в начале строку формата, чтобы получить тот же эффект без передачи поsed
команде[alias] recent = !git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)'|column -ts'|'
git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always|column -ts'|'}
Я смог сослаться на предыдущие примеры, чтобы создать что-то, что лучше всего подходит для меня.
источник
git for-each-ref --sort=-committerdate refs/heads/ refs/remotes --format='%(authordate:short) %(authorname) %(color:red)%(objectname:short) %(color:yellow)%(refname:short)%(color:reset) (%(color:green)%(committerdate:relative)%(color:reset))'
Мне также были нужны цвета, теги и удаленные ссылки без дубликатов:
Поскольку цитирование может быть трудным, вот псевдоним для Bash:
источник
| head -n20
в конце. Если вы используете псевдоним, убедитесь, что это идет в кавычках.Другие ответы не позволяют проходить,
-vv
чтобы получить подробный вывод.Итак, вот одна строка, которая сортирует
git branch -vv
по дате фиксации, сохраняя цвет и т. Д .:Если вы дополнительно хотите распечатать дату фиксации, вы можете использовать эту версию вместо:
Пример вывода:
Это, вероятно, более читаемый разделить на несколько строк:
Это также должно работать с другими аргументами
git branch
, например,-vvr
для перечисления ветвей удаленного отслеживания или-vva
для списков как удаленных, так и локальных ветвей.источник
-vv
может быть действительно полезным, спасибо. Однако это решение по-прежнему порождает новые процессы для каждой ветви, которых ОП хотел избежать.git branch
конкретно не определяет значение-vv
, а только-v
, поэтому-vv
должно иметь то же значение, что и-v
.-v, -vv, --verbose
содержит следующее:If given twice, print the name of the upstream branch, as well
Git 2.7 (четвертый квартал 2015 года) представит сортировку ветвлений с использованием непосредственно
git branch
:см. commit aa3bc55 , commit aedcb7d , commit 1511b22 , commit f65f139 , ... (23 сентября 2015), commit aedcb7d , commit 1511b22 , commit ca41799 (24 Sep 2015) и commit f65f139 , ... (23 сентября 2015 г.) Картик Наяк (
KarthikNayak
) .(Слиты Junio C Hamano -
gitster
- в фиксации 7f11b48 , 15 окт 2015)В частности, зафиксируйте aedcb7d :
Сделать «
branch.c
» использование «ref-filter
» API - интерфейсы для переборе рефов сортировки. Это удаляет большую часть кода, используемого в 'branch.c
', заменяя его вызовами к 'ref-filter
библиотеку '.Это добавляет опцию
--sort=<key>
:Вот:
Или (см. Ниже с Git 2.19)
Смотрите также коммит 9e46833 (30 октября 2015 г.) Картика Наяка (
KarthikNayak
) .При поддержке: Junio C Hamano (
gitster
) .(Слиты Junio C Hamano -
gitster
- в фиксации 415095f , 3 ноября 2015)С Git 2.19 порядок сортировки может быть установлен по умолчанию.
git branch
поддерживает конфигbranch.sort
, вродеgit tag
, который уже был конфигtag.sort
.См. Коммит 560ae1c (16 августа 2018 г.) Самюэля Мафтула (``) .
(Слиты Junio C Hamano -
gitster
- в фиксации d89db6f , 27 августа 2018)Для просмотра удаленных веток используйте
git branch -r --sort=objectsize
.-r
Флаг заставляет его в список удаленных филиалов вместо местных отделений.В Git 2.27 (Q2 2020) варианты
git branch
«и другие»for-each-ref
«принимали несколько--sort=<key>
вариантов в возрастающем порядке приоритета, но у него было несколько разрывов»--ignore-case
обработки " и разрывов связей с refname, которые были исправлены.См. Коммит 7c5045f , коммит 76f9e56 (3 мая 2020 г.) Джеффа Кинга (
peff
) .(Слиты Junio C Hamano -
gitster
- в фиксации 6de1630 , 08 мая 2020)источник
-r
Мне нравится использовать относительную дату и сокращать название филиала следующим образом:
Что дает вам вывод:
Я рекомендую создать файл Bash для добавления всех ваших любимых псевдонимов, а затем поделиться сценарием с вашей командой. Вот пример, чтобы добавить только этот:
Затем вы можете просто сделать это, чтобы получить хорошо отформатированный и отсортированный список локальных веток:
Обновление: Сделайте это, если хотите раскрасить:
источник
fatal: unknown field name: '-authordate:iso8601'
refs/heads
с ,refs/remotes
чтобы взглянуть на удаленных филиалах.expansion of alias 'branches' failed; 'echo' is not a git command
(echo ' ------------------------------------------------------------' && git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads && echo ' ------------------------------------------------------------') | grep --color -E "$(git rev-parse --abbrev-ref HEAD)$|$"
Начиная с Git 2.19 вы можете просто:
Вы также можете:
Таким образом, всякий раз, когда вы перечисляете ветви в текущем репозитории, они будут перечислены отсортированными по committerdate.
Если каждый раз, когда вы перечисляете ветки, вы хотите, чтобы они сортировались по comitterdate:
Отказ от ответственности: я являюсь автором этой функции в Git, и я реализовал ее, когда увидел этот вопрос.
источник
Добавляет немного цвета (так
pretty-format
как не доступно)источник
У меня была такая же проблема, поэтому я написал рубиновый камень под названием Twig . В нем перечислены ветви в хронологическом порядке (сначала самые новые), а также можно указать максимальный возраст, чтобы вы не перечисляли все ветви (если их много). Например:
Он также позволяет хранить пользовательские свойства для каждой ветви, например, идентификатор заявки, статус, задачи и фильтровать список ветвей в соответствии с этими свойствами. Дополнительная информация: http://rondevera.github.io/twig/
источник
Я придумал следующую команду (для Git 2.13 и позже):
Если у вас нет,
column
вы можете заменить последнюю строку наВыход выглядит как
Я написал сообщение в блоге о том, как работают различные части.
источник
git branch --sort
я упомянул в stackoverflow.com/a/33163401/6309 .К вашему сведению, если вы хотите получить список недавно проверенных веток (в отличие от недавно совершенных), вы можете использовать reflog Git:
Смотрите также: Как я могу получить список веток Git, которые я недавно проверил?
источник
Вот небольшой скрипт, который я использую для переключения между последними ветками:
Используя эти два псевдонима:
Просто позвоните в Git-репозиторий, и он покажет вам последние N ветвей (по умолчанию 10) и число в каждой. Введите номер филиала, и он проверит:
источник
Обычно мы рассматриваем удаленные филиалы в последнее время. Так попробуй это
источник
Вот еще один скрипт, который делает то же, что и все остальные скрипты. Фактически, это обеспечивает функцию для вашей оболочки.
Его вклад заключается в том, что он вытягивает некоторые цвета из вашей конфигурации Git (или использует значения по умолчанию).
источник
Это основано на версии saeedgnu , но с текущей веткой, отмеченной звездочкой и цветом, и показывающей только то, что не описано как «месяцы» или «годы» назад:
источник
Мой лучший результат в виде сценария:
источник
git branch --sort=-committerdate | head -5
Для любого, кто заинтересован в том, чтобы отсортировать только топ-5 названий веток на основе даты коммиттера.
источник
Принятый ответ из командной строки ошеломляет , но если вы хотите что-то более красивое, например графический интерфейс, и ваш источник === "github".
Вы можете нажать «Филиалы» в репозитории. Или нажмите URL-адрес напрямую: https://github.com/ORGANIZATION_NAME/REPO_NAME/branches.
источник
Вот вариант, который я искал:
Это
tail -r
переворачивает список, поэтому самый последнийcommiterdate
- последний.источник
tail
имеет-r
?Я передаю вывод принятого ответа в
dialog
интерактивный список:Сохранить как (например)
~/bin/git_recent_branches.sh
иchmod +x
это. Затем,git config --global alias.rb '!git_recent_branches.sh'
чтобы дать мне новуюgit rb
команду.источник
Я знаю, что ответов уже много, но вот мои два цента за простой псевдоним (мне нравится, когда моя последняя ветка внизу):
Это даст вам хороший обзор ваших последних 15 цветных веток с выделенной текущей веткой (она помечена звездочкой).
источник
Были некоторые проблемы с обработкой одинарных кавычек на Mac в bash_profile при попытке установить псевдоним. Этот ответ помог решить его Как избежать одинарных кавычек в одинарных кавычках
Рабочий раствор:
PS Не могу комментировать из-за моей репутации
источник
git for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'
это то что тебе нужноисточник
Git v2.19 представляет
branch.sort
опцию конфигурации (см. Branch.sort ).Так
git branch
будет сортировать по дате коммиттера (desc) по умолчанию ссценарий:
Обновить:
Так,
а также
источник