Как я могу получить список веток Git, упорядоченный по последнему коммиту? - PullRequest
1098 голосов
/ 04 марта 2011

Я хочу получить список всех веток в Git-репозитории с «самыми свежими» ветками вверху, где «самая свежая» ветвь - это та, которая была зафиксирована в последнее время (и, следовательно, более вероятначтобы быть одним, на которого я хочу обратить внимание).

Есть ли способ, которым я могу использовать Git, чтобы (а) отсортировать список ветвей по последнему коммиту или (б) получить список веток вместе сдата последней фиксации каждой из них, в каком-то машиночитаемом формате?

В худшем случае я всегда мог запустить git branch, чтобы получить список всех ветвей, проанализировать его вывод и затем git log -n 1 branchname --format=format:%ciдля каждого, чтобы получить дату фиксации каждой ветви.Но это будет работать на Windows-боксе, где ускорение нового процесса является относительно дорогим, поэтому запуск исполняемого файла Git один раз на ветку может замедлиться, если есть много ветвей.Есть ли способ сделать все это одной командой?

Ответы [ 27 ]

1 голос
/ 14 мая 2014

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

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

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

1 голос
/ 14 января 2016

Я перенаправляю вывод из принятого ответа в dialog, чтобы получить интерактивный список:

#!/bin/bash

TMP_FILE=/tmp/selected-git-branch

eval `resize`
dialog --title "Recent Git Branches" --menu "Choose a branch" $LINES $COLUMNS $(( $LINES - 8 )) $(git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short) %(committerdate:short)') 2> $TMP_FILE

if [ $? -eq 0 ]
then
    git checkout $(< $TMP_FILE)
fi

rm -f $TMP_FILE

clear

Сохранить как (например) ~/bin/git_recent_branches.sh и chmod +x it.Затем git config --global alias.rb '!git_recent_branches.sh', чтобы дать мне новую команду git rb.

1 голос
/ 18 марта 2019

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

git fetch
git for-each-ref --sort=-committerdate refs/remotes/origin
1 голос
/ 11 июня 2014

Опоздал на вечеринку здесь. Принятый ответ CML ошеломляет, но если вы хотите что-то более красивое, например, графический интерфейс, и ваше происхождение === "github".

Вы можете нажать «Филиалы» в репо. или нажмите на ссылку: https://github.com/ORGANIZATION_NAME/REPO_NAME/branches

1 голос
/ 07 февраля 2019

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

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

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

0 голосов
/ 10 апреля 2018

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))' это то, что вам нужно

0 голосов
/ 18 сентября 2018

Git v2.19 представляет параметр конфигурации branch.sort (см. branch.sort ).

Таким образом, git branch будет сортировать по дате коммиттера (desc) по умолчанию с

# gitconfig
[branch]
    sort = -committerdate     # desc

Сценарий:

$ git config --global branch.sort -committerdate

Обновление:

Итак,

$ git branch
* dev
  master
  _

и

$ git branch -v
* dev    0afecf5 Merge branch 'oc' into dev
  master 652428a Merge branch 'dev'
  _      7159cf9 Merge branch 'bashrc' into dev
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...