Я хочу получить список всех веток в Git-репозиторий с помощью "свежие" и ветви вверху, где-то "свежие" и власти, что'ы были совершены в последнее время (и, следовательно, более вероятно, чтобы быть одним я хочу обратить внимание).
Есть ли способ я могу использовать Git, чтобы либо (а) отсортировать список филиалов на последний коммит, или (б) получить список филиалов вместе с каждым's последняя фиксации даты, в какой-то машиночитаемом формате?
Худшем случае, я всегда могу запустить в Git ветка
, чтобы получить список всех филиалов, разобрать его выход, а затем `в Git журнала -Н 1 branchname --формат=формат:%ди для каждого из них, чтобы получить в каждом филиале'С дата фиксации. Но это будет работать на Windows, где набирает обороты новый процесс-это сравнительно дорого, поэтому запуск после того, как исполняемый Git в ветке можно сделать медленным, если есть много филиалов. Есть ли способ сделать все это с помощью одной команды?
Используйте что-то вроде - =-committerdate
опция Git для-каждого-Реф
;
Также доступны поскольку git 2.7.0 по ветке git
:
git for-each-ref --sort=-committerdate refs/heads/
# Or using git branch (since version 2.7.0)
git branch --sort=-committerdate # DESC
git branch --sort=committerdate # ASC
Продвинутое Использование#:
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 for-each-ref --count=30 --sort=-committerdate refs/heads/ --format='%(refname:short)'
Вот простая команда, которая перечисляет все ветви с последними изменениями:
git branch -v
Заказать по самой последней фиксации, используйте
git branch -v --sort=committerdate
Источник: http://git-scm.com/book/en/Git-Branching-Branch-Management
Я использовал следующие псевдонимы:
последние = и"!Р(){Git для-каждого-справ-то вроде - =-committerdate РЭС/руководители --формат='%(голова)%(цвет:желтый)%(название_ссылки:краткий)|%(цвет:жирный green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)'|колонка -ТС'|'}; Р"`в
которая производит:
Использовать '|' в отдельных.
Мне тоже нужны цветы, теги и удаленных ссылок без каких-либо дубликатов:
for ref in $(git for-each-ref --sort=-committerdate --format="%(refname)" refs/heads/ refs/remotes ); do git log -n1 $ref --pretty=format:"%Cgreen%cr%Creset %C(yellow)%d%Creset %C(bold blue)<%an>%Creset%n" | cat ; done | awk '! a[$0]++'
Потому что цитирование может быть трудно, вот это псевдоним для bash:
alias glist='for ref in $(git for-each-ref --sort=-committerdate --format="%(refname)" refs/heads/ refs/remotes ); do git log -n1 $ref --pretty=format:"%Cgreen%cr%Creset %C(yellow)%d%Creset %C(bold blue)<%an>%Creset%n" | cat ; done | awk '"'! a["'$0'"]++'"
Я мог сослаться на предыдущие примеры, чтобы создать то, что работает лучше для меня.
Git для-каждого-Реф что-то вроде - =-committerdate РЭС/руководители/ --формат='%(authordate:краткий) %(цвет:красный)%(имя_объекта:краткий) %(цвет:желтый)%(название_ссылки:краткий)%(цвет:перезагрузка) (%(цвет:зеленый)%(committerdate:относительная)%(цвет:сбросить))'
Остальные ответы Дон'т, кажется, чтобы позволить прохождение -ВВ
, чтобы получить подробный вывод.
Так вот'ы один-лайнер, который сортирует `Git в ветке -ВВ путем фиксации даты, сохраняя цвет и т. д.:
в
git branch -vv --color=always | while read; do echo -e $(git log -1 --format=%ct $(echo "_$REPLY" | awk '{print $2}' | perl -pe 's/\e\[?.*?[\@-~]//g') 2> /dev/null || git log -1 --format=%ct)"\t$REPLY"; done | sort -r | cut -f 2
Если вы дополнительно хотите напечатать дату фиксации, можно использовать эту версию:
в
git branch -vv --color=always | while read; do echo -e $(git log -1 --format=%ci $(echo "_$REPLY" | awk '{print $2}' | perl -pe 's/\e\[?.*?[\@-~]//g') 2> /dev/null || git log -1 --format=%ci)" $REPLY"; done | sort -r | cut -d ' ' -f -1,4-
Пример вывода:
2013-09-15 master da39a3e [origin/master: behind 7] Some patch
2013-09-11 * (detached from 3eba4b8) 3eba4b8 Some other patch
2013-09-09 my-feature e5e6b4b [master: ahead 2, behind 25] WIP
Это's наверное более читабельным разбита на несколько строк:
в
git branch -vv --color=always | while read; do
# The underscore is because the active branch is preceded by a '*', and
# for awk I need the columns to line up. The perl call is to strip out
# ansi colors; if you don't pass --color=always above you can skip this
local branch=$(echo "_$REPLY" | awk '{print $2}' | perl -pe 's/\e\[?.*?[\@-~]//g')
# git log fails when you pass a detached head as a branch name.
# Hide the error and get the date of the current head.
local branch_modified=$(git log -1 --format=%ci "$branch" 2> /dev/null || git log -1 --format=%ci)
echo -e "$branch_modified $REPLY"
# cut strips the time and timezone columns, leaving only the date
done | sort -r | cut -d ' ' -f -1,4-
Это должно также работать с другими аргументами филиал мерзавец
, например, - ВВР в список удаленные ветки, или
-ВВА` в список удаленных-отслеживание и местных отделений.
ГИТ 2.7 (4 квартал 2015) познакомит отделение сортировки, используя непосредственно филиал ГИТ
:
См. совершить aa3bc55, совершают aedcb7d, совершают 1511b22, совершают f65f139, ... (23 сентября 2015), совершают aedcb7d, совершают 1511b22, совершают ca41799 (24 сентября 2015), и совершать f65f139, ... (23 сентября 2015 г.) Картик Наяк (KarthikNayak
).
<суп>(объединяются по Джунио с Hamano -- gitster
-- в совершить 7f11b48, 15 октября 2015)</SUP и ГТ;
В частности, совершают aedcb7d:
филиала##
.с
: с помощью 'Реф-фильтр
' Апис
Принять 'филиал.ц
' использовать 'Реф-фильтр
' API для перебора ссылок сортировки. Это удаляет большинство кодов, используемых в 'филиал.ц
' заменив его
с призывами к 'Реф-фильтр
' библиотека.
Он добавляет опцию --вроде=<ключ>
:
сортировка по ключу, данному. Префикс
-
для сортировки в порядке убывания значения.
вы можете использовать что-то вроде=<ключ>` вариант несколько раз, и в этом случае Последний ключ становится первичным ключом.
поддерживаемые ключи такой же, как те, в
Git для-каждого-Реф
. Сортировать по умолчанию порядок сортировки на основе полного имени (включая рефы/...` префикс). Этот список отдельно стоящее руководителя (если имеется), затем местные отделения и, наконец, удаленные ветки.
Здесь:
git branch --sort=-committerdate
Или (см. ниже с Git 2.19)
# if you are sure to /always/ want to see branches ordered by commits:
git config --global branch.sort -committerdate
git branch
См. также совершить 9e46833 (30 октября 2015) на Картик Наяк (KarthikNayak
).
Помог-по: июнь Hamano с (gitster
).
<суп>(объединяются по Джунио с Hamano -- gitster
-- в совершить 415095f, ноябрь 2015)&ЛТ 03;/SUP и ГТ;
при сортировке как на числовые значения (например,
--вроде=objectsize
) нет никакого сравнения запасной вариант, когда оба судьи имеют одинаковую ценность. Это может привести к неожиданным результатам (т. е. порядок листинга ссылок с одинаковыми значениями не может быть заранее определено) как отметил Йоханнес Сиксте ($gmane/280117).
следовательно, переход к алфавитному сравнение, основанное на название_ссылки всякий раз, когда другой критерий равен.
$ git branch --sort=objectsize
* (HEAD detached from fromtag)
branch-two
branch-one
master
С Git 2.19, порядок сортировки может быть задан по умолчанию.
филиал ГИТ
поддерживает конфигурации-ветке.сорт, как
в Git тег, который уже был тег в конфиге.сортировка. См. [совершить 560ae1c](https://github.com/git/git/commit/560ae1c164ad040a389ccc47834dce8c15447294) (16 августа 2018) по [Самуил Maftoul (
)](https://github.com/).
<суп>(объединяются по Джунио с Hamano -- gitster
-- в совершить d89db6f, 27 августа 2018)</SUP и ГТ;
филиал.сортировать:
эта переменная контролирует сортировки филиалы, когда отображается
в Git-ветка
. Без "--вроде=в<значение> в
" вариант, значение этой переменной будет использовано в качестве значения по умолчанию.
В списке удаленных филиалов, используйте филиал -Р ЖКТ --вроде=objectsize
. В -р
флаг приводит его в список удаленных веток вместо местных отделений.
Мне нравится использовать относительную дату и сократить название ветки так:
git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads
Который дает вам выход:
21 minutes ago nathan/a_recent_branch
6 hours ago master
27 hours ago nathan/some_other_branch
29 hours ago branch_c
6 days ago branch_d
Я рекомендую сделать файл Bash для добавления всех ваших любимых псевдонимов, а затем делиться сценарий для вашей команды. Здесь'ы например, чтобы добавить только один:
#!/bin/sh
git config --global alias.branches "!echo ' ------------------------------------------------------------' && git for-each-ref --sort='-authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/heads && echo ' ------------------------------------------------------------'"
Затем вы можете просто сделать это, чтобы получить красиво отформатированный и отсортированный список местного отделения:
git branches
Обновление: делать это, если вы хотите раскраски:
#!/bin/sh
#
(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)$|$"
Как ЖКТ 2.19 можно просто:
git branch --sort=-committerdate
Вы также можете:
git config branch.sort -committerdate
Поэтому, когда Вы список филиалов в текущем репозитории, он будет указан отсортированный по committerdate.
Если всякий раз, когда Вы список филиалов, вы хотите, чтобы они отсортированы по comitterdate:
git config --global branch.sort -committerdate
Отказ от ответственности: Я'м автор эту функцию в Git, и я реализовал ее, когда я увидел этот вопрос.
Добавляет некоторые цвета (с довольно-формат` это'т доступен)
[alias]
branchdate = for-each-ref --sort=-committerdate refs/heads/ --format="%(authordate:short)%09%(objectname:short)%09%1B[0;33m%(refname:short)%1B[m%09"
Я придумал следующую команду (для Git 2.13 и выше):
git branch -r --sort=creatordate \
--format "%(creatordate:relative);%(committername);%(refname:lstrip=-1)" \
| grep -v ";HEAD$" \
| column -s ";" -t
Если у вас нет столбца
, вы можете заменить последнюю строку с
| sed -e "s/;/\t/g"
Вывод выглядит
6 years ago Tom Preston-Werner book
4 years, 4 months ago Parker Moore 0.12.1-release
4 years ago Matt Rogers 1.0-branch
3 years, 11 months ago Matt Rogers 1.2_branch
3 years, 1 month ago Parker Moore v1-stable
12 months ago Ben Balter pages-as-documents
10 months ago Jordon Bedwell make-jekyll-parallel
6 months ago Pat Hawks to_integer
5 months ago Parker Moore 3.4-stable-backport-5920
4 months ago Parker Moore yajl-ruby-2-4-patch
4 weeks ago Parker Moore 3.4-stable
3 weeks ago Parker Moore rouge-1-and-2
19 hours ago jekyllbot master
Я написал блоге о том, как различные части работы.
У меня была такая же проблема, поэтому я написала рубиновый камень под названием веточка. В нем перечислены филиалы в хронологическом порядке (новые сверху), а также может позволить вам установить максимальную возраст, так что вы Дон't список всех филиалов (если у вас их много). Например:
$ twig
issue status todo branch
----- ------ ---- ------
2013-01-26 18:00:21 (7m ago) 486 In progress Rebase optimize-all-the-things
2013-01-26 16:49:21 (2h ago) 268 In progress - whitespace-all-the-things
2013-01-23 18:35:21 (3d ago) 159 Shipped Test in prod * refactor-all-the-things
2013-01-22 17:12:09 (4d ago) - - - development
2013-01-20 19:45:42 (6d ago) - - - master
Она также позволяет сохранять пользовательские свойства для каждого филиала, например, идентификатор билета, статуса, задач, а также фильтровать список филиалов в соответствии с этими свойствами. Подробнее: http://rondevera.github.io/twig/
К слову, если вы'd, как, чтобы получить список недавно проверил филиалы (в отличие от недавно совершенных) вы можете использовать git'ы reflog:
$ git reflog | egrep -io "moving from ([^[:space:]]+)" | awk '{ print $3 }' | head -n5
master
stable
master
some-cool-feature
feature/improve-everything
Как правило, мы недавно рассмотреть удаленные филиалы. Так что попробуйте этот
git fetch
git for-each-ref --sort=-committerdate refs/remotes/origin
Вот еще один скрипт, который делает то, что все остальные скрипты делать. По сути, она предоставляет функции для вашей раковины.
Его вклад заключается в том, что он тянет некоторые цвета от конфигурации Git (или использует по умолчанию).
# Git Branch by Date
# Usage: gbd [ -r ]
gbd() {
local reset_color=`tput sgr0`
local subject_color=`tput setaf 4 ; tput bold`
local author_color=`tput setaf 6`
local target=refs/heads
local branch_color=`git config --get-color color.branch.local white`
if [ "$1" = -r ]
then
target=refs/remotes/origin
branch_color=`git config --get-color color.branch.remote red`
fi
git for-each-ref --sort=committerdate $target --format="${branch_color}%(refname:short)${reset_color} ${subject_color}%(subject)${reset_color} ${author_color}- %(authorname) (%(committerdate:relative))${reset_color}"
}
Здесь's маленький скрипт, который я использую для переключения между недавней ветки:
#!/bin/bash
# sudo bash
re='^[0-9]+$'
if [[ "$1" =~ $re ]]; then
lines="$1"
else
lines=10
fi
branches="$(git recent | tail -n $lines | nl)"
branches_nf="$(git recent-nf | tail -n $lines | nl)"
echo "$branches"
# Prompt which server to connect to
max="$(echo "$branches" | wc -l)"
index=
while [[ ! ( "$index" =~ ^[0-9]+$ && "$index" -gt 0 && "$index" -le "$max" ) ]]; do
echo -n "Checkout to: "
read index
done
branch="$( echo "$branches_nf" | sed -n "${index}p" | awk '{ print $NF }' )"
git co $branch
clear
Используя эти два псевдонима:
recent = for-each-ref --sort=committerdate refs/heads/ --format=' %(color:blue) %(authorname) %(color:yellow)%(refname:short)%(color:reset)'
recent-nf = for-each-ref --sort=committerdate refs/heads/ --format=' %(authorname) %(refname:short)'
Просто позвоните, что в Git-репозиторий, и он покажет вам последние ветви Н (10 по умолчанию) и количество в сторону каждого. Введите номер филиала, и это подтверждается:
Это основано на saeedgnu's Версия, но с текущей ветви показаны со звездой и в цвет, и показывая только то, что не описано как "месяцев" или "лет" и назад:
в
current_branch="$(git symbolic-ref --short -q HEAD)"
git for-each-ref --sort=committerdate refs/heads \
--format='%(refname:short)|%(committerdate:relative)' \
| grep -v '\(year\|month\)s\? ago' \
| while IFS='|' read branch date
do
start=' '
end=''
if [[ $branch = $current_branch ]]; then
start='* \e[32m'
end='\e[0m'
fi
printf "$start%-30s %s$end\\n" "$branch" "$date"
done
Принятые командной строки ответа породы, но если вы хотите что-то покрасивее, например, GUI, и ваше происхождение = = = и"на GitHub и".
Вы можете нажать на "ветки" в репозитории. Или нажмите на URL-адрес напрямую: https://github.com/ORGANIZATION_NAME/REPO_NAME/branches