Как изменить порядок вывода веток git - PullRequest
13 голосов
/ 09 июля 2011

Когда я набираю git branch, я получаю список ветвей, которые сортируются по алфавиту, а не по времени их создания.

Есть ли способ сделать вывод git branch отсортированным по дате?

Ответы [ 3 ]

10 голосов
/ 09 июля 2011

Редактировать

Увы, существуют очевидные проблемы с параметрами сортировки, принятыми git-for-each-ref. Поскольку эта команда (очевидно) явно предназначена для показа refs и принимает опцию --sort, я думаю об этом как о вероятной ошибке [1].

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


[1] если бы это было git-rev-list или git-log Я бы подумал, что проблема была бы в том, что мы на самом деле не гуляли дерево ревизий; мы активно пытаемся показать только кончиков деревьев, не выгуливая их.

Временная альтернатива

git log --no-walk --date-order --oneline --decorate \
       $(git rev-list --branches --no-walk)

Это даст вам список, похожий на

4934e92 (HEAD, origin/testing, origin/HEAD, testing) reviewed INSTALL file as per #1331
6215be7 (origin/maint, maint) reviewed INSTALL file as per #1331
1e5e121 (origin/emmanuel, emmanuel) buffers: adjust the size in zfsfuse_stat
e96783e (origin/compress, compress) buffers: adjust the size in zfsfuse_stat
f6e2c6c (origin/unstable, unstable) revert the fatal condition again
dd52720 (origin/master-lucid, master-lucid) lucid
3b32fa7 (tag: 0.7.0, origin/master, master) panic revocation of 0.7.0-0 package necessitates an update
6eaa64f (origin/maint-0.6.9, maint-0.6.9) Replace remount by drop_caches (on rollback)

_ Как видите, результат может быть немного ошеломляющим при наличии множества удаленных (отслеживающих) ветвей, которые фактически дублируют одинаковые ревизии. Тем не менее, результат правильно упорядочен по (нисходящей) дате.

Правильный (к сожалению, нарушен?) Подход ...

Нет, но вы должны быть в состоянии сделать

git for-each-ref --sort='-*committerdate' --format="%(refname:short)" refs/heads/

( используйте --sort='-*authordate' для заказа даты автора )

В моем тестовом репо это дает:

compress
emmanuel
maint
maint-0.6.9
master
master-lucid
testing
unstable

Псевдоним

вы можете создать псевдоним git для этого: добавьте следующие строки к .git/config

[alias]
branch2 = git for-each-ref --sort='-*committerdate' --format="%(refname:short)" refs/heads/

С этого момента вы можете просто сказать git branch2

2 голосов
/ 27 февраля 2019

Начиная с git 2.7.0 это будет работать:

git branch --sort=-committerdate
0 голосов
/ 13 июня 2019

Ответ Stujo мой любимый, но я хотел пойти еще дальше и сделать сортировку по дате коммиттера своим поведением по умолчанию git branch.Вот как:

git config --global branch.sort -committerdate

Удалите - перед committerdate, чтобы отсортировать другим способом.

Теперь git branch всегда будет сортироваться по дате!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...