我如何获取最近检出的Git分支列表?

50

在Git分支之间转移时,我有时会忘记我最近使用的分支名称。如何按照检出顺序显示最近检出的分支/标签/提交的列表?

3个回答

79

摘要:

您可以使用Git的reflogcheckout顺序显示最近的移动记录:git reflog

脚本:

以下是一个脚本,您可以通过git recent在任何Git存储库内部下载并使用:https://gist.github.com/jordan-brough/48e2803c0ffa6dc2e0bd

用法:

$ (master) git recent -n 5

1) master  4) deleted-branch
2) stable  5) improve-everything
3) fun
Choose a branch: 2

$ (stable) …

请参见gist了解更多详情/选项。

详情:

以下是脚本如何使引用日志输出更易用的基本步骤:

$ git reflog | egrep -io "moving from ([^[:space:]]+)" | awk '{ print $3 }' | awk ' !x[$0]++' | egrep -v '^[a-f0-9]{40}$' | head -n5
master
stable
fix-stuff
some-cool-feature
feature/improve-everything

3
以Jordan的要点为基础,我编写了一个脚本,可以从列表中选择一个最近的分支进行检查:https://gist.github.com/fritz-c/c1e528b09bc1c0827a3c - Chris
谢谢@Chris!我已经更新了我的脚本以包含那个想法,并在脚本中列出了你作为贡献者。 - Jordan Brough
你能否将这个答案合并到git别名中?我不知道如何在gitconfig别名中使用grep和其他cli工具。最好带有像git log一样的选项-<n>? - kuga
@kuga,这个要点包含了如何使其可用,例如 git recent(下载脚本,使其可执行,将其放在您的路径中)。您想使用 git 别名的原因是什么? - Jordan Brough
没有特别的原因,只是这样更容易。虽然我没有考虑将其制作成脚本 :) - kuga
显示剩余2条评论

5

我在我的zshell中有一个类似的一行命令,它接受一个参数来指定历史记录的长度,默认为10。

alias bstack='f() { git reflog | grep checkout | cut -d " " -f 8 | uniq | head ${1} | cat -n };f'

例如,要列出最新的3个分支。
bstack -3


 1  my-current-branch
 2  my-previous-branch
 3  my-third-most-recent-branch

我从中推导出了几个有用的快捷方式。
alias bjmp='fn() { bstack ${1} | tail -1 | cut -f 2 | xargs git checkout  }; fn'

这使我能够从上面的数字中指定要检出哪个分支。

bjmp -3

将检查 "我的第三个最近的分支"

alias b="bstack -1"
alias bpop="bjmp -2"

这些快捷键也有助于用单个按键查看当前分支(虽然这不是最简便的方法),以及切换到先前的分支。


为提供不需要脚本的解决方案并建议命令的有用别名点赞。 - Robin Bastiaan
谢谢!我建议将grep checkout改为grep checkout:,因为在rebase过程中也会出现checkout这个词,导致运行此脚本时出现空行。而正常的checkout操作只会出现冒号: - mwcz

0
这是一个基于其他回答的 PowerShell 脚本,我在这里将它拼凑在一起:
function gsh() {
  # git switch with history of recent branches
  $branch = & git reflog | Select-String -Pattern "moving from (\S+) to (\S+)" | %{ $_.Matches.Groups[1].Value } | Invoke-Fzf -NoSort
  if ($branch)
  {
    & git switch $branch
  }
}

该工具利用了强大的fzf模糊查找器,允许您进行交互式选择要切换的分支-包括对分支进行模糊过滤!请参阅PSFzf,了解如何获取Invoke-Fzf命令的详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接