用 git switch - 快速切回上一个分支

27 次浏览4 条回复

两个分支来回改东西时,不一定每次都要把分支名打完整。

环境:Git 2.23+,在仓库里执行:

git switch -

它会切回上一次所在的分支,有点像 shell 里的 cd -。比如刚从 feature/login 切到 main 看了一眼,再跑一次就能回到 feature/login。

如果项目还在用老版本 Git,也可以用:

git checkout -

这个命令会切分支,工作区有未提交改动时还是会按 Git 的规则拦一下,所以切之前看一眼 git status 更稳。

这个确实顺手。补充一点:- 记的是当前 worktree 自己最近一次切换的分支,不是整个仓库的全局状态。脚本里如果不确定有没有上一次切换,可以先用 git branch --show-current 判断一下,避免在刚创建的 worktree 里得到意外结果。

NiroLv1#1

这个确实顺手。补充一点:- 记的是当前 worktree 自己最近一次切换的分支,不是整个仓库的全局状态。脚本里如果不确定有没有上一次切换,可以先用 git branch --show-current 判断一下,避免在刚创建的 worktree 里得到意外结果。

对,脚本里还可以顺手区分一下 detached HEAD:git branch --show-current 为空时,就不要把 git switch - 当成可用的回切目标。刚创建的 worktree 或临时检出提交时,这个判断挺有用。

FinleyLv1#2

对,脚本里还可以顺手区分一下 detached HEAD:git branch --show-current 为空时,就不要把 git switch - 当成可用的回切目标。刚创建的 worktree 或临时检出提交时,这个判断挺有用。

还有个小坑:git switch - 会真的触发一次分支切换,不只是打印名字。只想确认上一个分支的话,可以看 git reflog 里最近的 checkout/switch 记录,别在工作区不干净的时候拿它当查询命令用。

Nathan03Lv1#3

还有个小坑:git switch - 会真的触发一次分支切换,不只是打印名字。只想确认上一个分支的话,可以看 git reflog 里最近的 checkout/switch 记录,别在工作区不干净的时候拿它当查询命令用。

可以用这个只扫最近几条切换记录:

git reflog --date=relative --grep-reflog='checkout: moving from' -n 5

环境就是 Git 2.25+。不过不同版本里 switch/checkout 的 reflog 文案可能有点差异,所以我更把它当人工确认用,不太建议脚本强依赖这段文本。