Когда я набираю git branch, я получаю список ветвей, которые, похоже, отсортированы по алфавиту, а не по времени их создания.
Есть ли способ сделать вывод git branch отсортированным по дате?
Когда я набираю git branch, я получаю список ветвей, которые, похоже, отсортированы по алфавиту, а не по времени их создания.
Есть ли способ сделать вывод git branch отсортированным по дате?
Изменить
Увы, есть очевидные проблемы с вариантами сортировки, используемыми 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
git branch. Есть идеи, в чем может быть проблема?
- person WinWin; 09.07.2011
--sort='-*authordate' и --sort='-*taggerdate', но, похоже, ни один из них не справляется с задачей сортировки по времени.
- person WinWin; 09.07.2011
git branch, но я всегда могу использовать cut или sed, чтобы получить желаемое форматирование. Спасибо!
- person WinWin; 09.07.2011
| cut -d " " -f 2.
- person WinWin; 09.07.2011
| cut -d "(" -f 2 | cut -d ")" -f 1 работает даже лучше. :)
- person WinWin; 09.07.2011
gitk)
- person WinWin; 11.07.2011
git show-branch) :)
- person sehe; 11.07.2011
Начиная с git 2.7.0 это будет работать:
git branch --sort=-committerdate
Ответ Stujo - мой любимый, но я хотел пойти еще дальше и сделать сортировку по дате коммиттера своим поведением по умолчанию git branch. Вот как:
git config --global branch.sort -committerdate
Удалите - перед committerdate, чтобы выполнить другую сортировку.
Теперь git branch всегда будет сортироваться по дате!