在Git分支之间转移时,我有时会忘记我最近使用的分支名称。如何按照检出顺序显示最近检出的分支/标签/提交的列表?
在Git分支之间转移时,我有时会忘记我最近使用的分支名称。如何按照检出顺序显示最近检出的分支/标签/提交的列表?
您可以使用Git的reflog
以checkout
顺序显示最近的移动记录: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
我在我的zshell中有一个类似的一行命令,它接受一个参数来指定历史记录的长度,默认为10。
alias bstack='f() { git reflog | grep checkout | cut -d " " -f 8 | uniq | head ${1} | cat -n };f'
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"
这些快捷键也有助于用单个按键查看当前分支(虽然这不是最简便的方法),以及切换到先前的分支。
grep checkout
改为grep checkout:
,因为在rebase过程中也会出现checkout
这个词,导致运行此脚本时出现空行。而正常的checkout操作只会出现冒号:
。 - mwczfunction 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
命令的详细信息。
git recent
(下载脚本,使其可执行,将其放在您的路径中)。您想使用 git 别名的原因是什么? - Jordan Brough