Как я могу получить список веток Git, упорядоченных по последнему коммиту?

Я создал плагин, который может генерировать эффект предварительного просмотра в IE 7+ благодаря интернету, но имеет мало ограничений. Я помещал его в github page , чтобы его было легче получить

$(function () {
		$("input[name=file1]").previewimage({
			div: ".preview",
			imgwidth: 180,
			imgheight: 120
		});
		$("input[name=file2]").previewimage({
			div: ".preview2",
			imgwidth: 90,
			imgheight: 90
		});
	});
.preview > div {
  display: inline-block;
  text-align:center;
}

.preview2 > div {
  display: inline-block; 
  text-align:center;
}


	Preview
	
Preview2

1102
задан Peter Mortensen 4 December 2018 в 18:05
поделиться

17 ответов

Используйте опцию --sort=-committerdate из git for-each-ref ;

Также доступно начиная с Git 2.7.0 для git branch :

Базовое использование:

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

Результат:

Result

Расширенное использование:

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))'

Результат:

Result

1567
ответ дан Peter Mortensen 4 December 2018 в 18:05
поделиться

Я знаю, что ответов уже много, но вот мои два цента для простого псевдонима (мне нравится, когда моя последняя ветка внизу):

[alias]
        br = !git branch --sort=committerdate --color=always | tail -n15
[color "branch"]
        current = yellow
        local = cyan
        remote = red

Это даст вам хороший обзор последних 15 цветных веток с выделенной текущей веткой (и звездочкой).

1
ответ дан Tom 4 December 2018 в 18:05
поделиться

Вот вариант, который я искал:

git for-each-ref --sort=-committerdate --format='%(committerdate)%09%(refname:short)' refs/heads/ | tail -r

То, что tail -r переворачивает список, так что последний commiterdate последний.

1
ответ дан Ben 4 December 2018 в 18:05
поделиться

Обычно мы рассматриваем удаленные ветви в последнее время. Так что попробуйте это

git fetch
git for-each-ref --sort=-committerdate refs/remotes/origin
2
ответ дан Victor Choy 4 December 2018 в 18:05
поделиться

git branch --sort=-committerdate | head -5

Для любого, кто заинтересован в том, чтобы отсортировать только топ-5 названий веток на основе даты коммиттера.

2
ответ дан vardin 4 December 2018 в 18:05
поделиться

Мой лучший результат в виде сценария:

git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short)|%(committerdate:iso)|%(authorname)' |
    sed 's/refs\/heads\///g' |
    grep -v BACKUP  | 
    while IFS='|' read branch date author
    do 
        printf '%-15s %-30s %s\n' "$branch" "$date" "$author"
    done
2
ответ дан saeedgnu 4 December 2018 в 18:05
поделиться

Вот небольшой скрипт, который я использую для переключения между последними ветвями:

#!/bin/bash
# sudo bash

re='^[0-9]+ 

Использование этих двух псевдонимов

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-репо, и он покажет вам последние N ветвей (по умолчанию 10) и число в каждой. Введите номер филиала и он проверяется:

enter image description here

if [[ "$1" =~ $re ]]; then lines="$1" else lines=10 fi branchs="$(git recent | tail -n $lines | nl)" branchs_nf="$(git recent-nf | tail -n $lines | nl)" echo "$branchs" # Prompt which server to connect to max="$(echo "$branchs" | wc -l)" index= while [[ ! ( "$index" =~ ^[0-9]+$ && "$index" -gt 0 && "$index" -le "$max" ) ]]; do echo -n "Checkout to: " read index done branch="$( echo "$branchs_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-репо, и он покажет вам последние N ветвей (по умолчанию 10) и число в каждой. Введите номер филиала и он проверяется:

enter image description here

3
ответ дан Agus Arias 4 December 2018 в 18:05
поделиться

На основе версии ilius, но с текущей ветвью, отмеченной звездочкой и цветом, и показывающей только то, что не описано как «месяцы» или «годы» назад:

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
3
ответ дан Mark Lodato 4 December 2018 в 18:05
поделиться

У меня была такая же проблема, поэтому я написал рубиновый камень под названием Twig . В нем перечислены ветви в хронологическом порядке (сначала самые новые), а также можно указать максимальный возраст, чтобы вы не перечисляли все ветви (если их много). Например:

$ 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/

.
8
ответ дан Ron DeVera 4 December 2018 в 18:05
поделиться

Добавляет немного цвета (поскольку pretty-format недоступно)

[alias]
    branchdate = for-each-ref --sort=-committerdate refs/heads/ --format="%(authordate:short)%09%(objectname:short)%09%1B[0;33m%(refname:short)%1B[m%09"
11
ответ дан epylinkn 4 December 2018 в 18:05
поделиться

Мне нравится использовать относительную дату и сокращать название ветви следующим образом:

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)$|$"
19
ответ дан n8tr 4 December 2018 в 18:05
поделиться

Я смог сослаться на приведенные выше примеры, чтобы создать что-то, что лучше всего подходит для меня.

git for-each-ref --sort = -committerdate refs /heads / --format = '% (автор: короткий)% (цвет: красный)% (имя объекта: короткий)% (цвет: желтый) )% (refname: short)% (цвет: сброс) (% (цвет: зеленый)% (committerdate: относительный)% (цвет: сброс)) '

Screenshot of Output

30
ответ дан Andy 4 December 2018 в 18:05
поделиться

Я использую следующий псевдоним:

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"

, который производит: result

Редактировать: использовать '|' отделить, благодаря @ Björn Lindqvist

Обновление: добавлено * перед текущей веткой, благодаря @elhadi
Редактировать: исправил регистр где текущая ветвь была подстрокой другой ветки

Редактировать: использовать более простой синтаксис для текущей ветки, благодаря @Joshua Skrzypek

48
ответ дан Community 4 December 2018 в 18:05
поделиться

Вот оптимальный код, который объединяет два других ответа:

git for-each-ref --sort=-committerdate refs/heads/ --format='%(committerdate:short) %(authorname) %(refname:short)'
81
ответ дан nikolay 4 December 2018 в 18:05
поделиться

Вот простая команда, которая перечисляет все ветви с последними коммитами:

git branch -v

Чтобы упорядочить по последним коммитам, используйте

git branch -v --sort=committerdate

Источник: http: / /git-scm.com/book/en/Git-Branching-Branch-Management

75
ответ дан Ben Claar 4 December 2018 в 18:05
поделиться

Я придумал следующую команду (для Git 2.13 и позже):

git branch -r --sort=creatordate \
    --format "%(creatordate:relative);%(committername);%(refname:lstrip=-1)" \
    | grep -v ";HEAD$" \
    | column -s ";" -t

Если у вас нет column, вы можете заменить последнюю строку на

    | 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

Я написал пост в блоге о том, как работают различные части.

8
ответ дан bdesham 4 December 2018 в 18:05
поделиться

Испытал некоторые затруднения при обработке одинарных кавычек на Mac в bash_profile при попытке установить псевдоним. Этот ответ помог разрешить его ", Как выйти из одинарных кавычек в единственных заключенных в кавычки строках

Рабочее решение:

alias gb='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))'"'"''

P.S. не Мог прокомментировать из-за моей репутации

0
ответ дан 19 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: