如何找到 git 签出的最后一个分支

How to find the last branch checked out in git

我们可以使用 git checkout - 检查最后一个分支,但是有没有办法只找出最后一个分支而不检查它?

编辑: 我已经发现我可以使用:

git reflog | grep -i "checkout: moving"|head -1|cut -d' ' -f6

但是我想知道有没有直接更简单的命令。我正在更新问题以反映这种需求。抱歉不够清楚

git reflog 就是你要用的。在这里,您会发现:

  • 您上次提交的内容(由 "commit" 表示)
  • 您签出的内容(由 "checkout" 表示)
  • 当你拉动时(用 "pull" 表示)

您查看的内容在这里很重要; reflog 将使用用 "checkout" 表示的格式,并在查看特定分支时指定 "moving from A to B"。

"checkout: moving" 的简单 grep 将为您提供您访问过的分支的列表;最后一张在最上面。

完整的完整命令:

git reflog | grep -i "checkout: moving"

您的示例输出(由 git reflog | ... 生成)足够清晰。

git rev-parse 命令可以与参考查找语法结合使用,一次性完成:

$ git rev-parse --symbolic-full-name @{-1}
refs/heads/stash-exp
$ git rev-parse --abbrev-ref @{-1}
stash-exp

请注意,the gitrevisions documentation 描述了 @{-<em>N</em>} 语法。还要注意,如果没有第 N 个前一个分支,rev-parse 会静静地打印任何内容:

$ git rev-parse --abbrev-ref @{-2} && echo ok || echo fail
master
ok
$ git rev-parse --abbrev-ref @{-3} && echo ok || echo fail
ok

当然,在大多数可能需要名称的地方,您可以直接使用 @{-1} 语法。

使用 grep -m 限制结果:

git reflog | grep -i “checkout: moving” -m 10