如何通过最近的签出对git branch的输出进行排序

问题描述 投票:3回答:4

我有很多当地的分支机构。运行git branch列出它们,它们溢出页面。我经常想要在当前检出的分支和我最后工作的分支之间切换,或者可能在最后一个之前切换。如果我足够幸运地记住关键字(或票号),则该过程是通过眼睛或可能的命令+ f扫描20-30个本地分支的列表。

相反,我想说git branch并通过结账订单显示分支。同样地,您似乎在最近的活动所订购的许多程序中列出了许多项目。这似乎是订单标准的明显默认选择,我很惊讶它不是git的默认值。

edit:

我修改了我的问题只是通过结账来询问。我无法找到一个排序谓词,它将根据每个分支最近结账的日期过滤git branch的输出。

git branch
4个回答
1
投票

你有没有尝试过for-each-ref选项?有很多可排序的字段。

这是一个按authordate排序的

 git for-each-ref  --sort='-*authordate'

当我在我自己较小的一组分支上测试时,最近创建/签出的分支位于顶部。

看起来这些是git-ref结构中唯一的DATE / TIME字段:

"authordate"
"committerdate"
"taggerdate"
"creatordate"

您可以通过尝试此命令获取文档来了解更多信息:

git for-each-ref --help

也许作为检查.git / refs / heads更新的脚本?


1
投票

按检出的顺序列出分支(不是最后提交顺序):

git log -g --grep-reflog "checkout:" --format="%gs" | cat -n | sed -E "s/^\s+([0-9]+).*from (.*) to .*/\1 \2/g" | tac

然后,您可以检查其中一个

git checkout @{-nnn}

其中nnn是分支名称前显示的数字。要在当前和上一个分支之间切换,只需使用

git checkout -

您可以将上面的命令组合到新的git命令,如下所示:

git config --global alias.lb '!git log -g --grep-reflog "checkout:" --format="%gs" | cat -n | sed -E "s/^\s+([0-9]+).*from (.*) to .*/\1 \2/g" | tac; read -p "Aussuchen: " i; git checkout @{-$i}'

使用

git lb

显示最后使用的分支并选择其中一个。


0
投票

git branch支持与git for-each-ref相同的排序选项,请参阅https://git-scm.com/docs/git-for-each-ref

这意味着您可以按照每个提交日期对分支进行排序:

git branch --sort='committerdate'

0
投票

我经常想要在当前检出的分支和我最后工作的分支之间切换,或者可能在最后一个之前切换。

感谢您描述给您带来困难的情况,并询问如何实施您正在尝试的解决方案。

Git有一个非常直接的方法来解决这个问题。重复结账你最后工作,

git checkout @{-1}

并在最后重复之前

git checkout @{-2}
© www.soinside.com 2019 - 2024. All rights reserved.