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

时间:2017-12-21 15:24:09

标签: git branch

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

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

编辑:

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

4 个答案:

答案 0 :(得分:1)

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

这是一个按authordate排序的

TheListOfStrings

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

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

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

通过尝试此命令获取文档,您可以在此处找到更多信息:

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

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

答案 1 :(得分: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

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

答案 2 :(得分:0)

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

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

git branch --sort='committerdate'

答案 3 :(得分:0)

  

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

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

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

git checkout @{-1}

并重复前一个

git checkout @{-2}