我有很多本地分支机构。运行git branch
会列出它们并且它们会溢出页面。我经常想要在当前检出的分支和我最后工作的分支之间切换,或者可能在最后一个之前切换。如果我足够幸运地记住关键字(或票号),则该过程是通过眼睛或可能的命令+ f扫描20-30个本地分支的列表。
相反,我想说git branch
并让它按结帐顺序显示分支。同样地,您似乎在最近的活动所订购的许多程序中列出了许多项目。这似乎是订单标准的明显默认选择,我很惊讶它不是git的默认值。
我修改了我的问题,只询问了一个结账方式。我无法找到一个排序谓词,它会根据每个分支最近结账的日期过滤git branch
的输出。
答案 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}