如何在git中找到上次检出的分支

8
我们可以使用 `git checkout -` 命令来检出上一个分支,但是否有一种方法只是查找上一个分支而不检出它呢?
编辑: 我已经发现我可以使用:
git reflog | grep -i "checkout: moving"|head -1|cut -d' ' -f6

但我想知道是否有一个更简单的直接命令。我更新了问题以反映这个需求。抱歉没有表达清楚。


一些命令可能类似于“git branch -”或“git -n checkout -”,它们将输出最后一个分支并不进行任何更改。 - Champ
3个回答

16

你的示例输出(由git reflog | ...生成)已经足够明确了。

git rev-parse 命令可以与引用查找语法结合使用,一次完成此操作:

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

请注意,gitrevisions文档中描述了@{-N}的语法。同时需要注意的是,如果没有第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}语法。


3

git reflog 是您要使用的命令。在此命令中,您将找到:

  • 您最后提交的内容(由 "commit" 表示)
  • 您已经检出的内容(由 "checkout" 表示)
  • 您何时拉取内容(由 "pull" 表示)

您已经检出的内容在这里非常重要;当查看特定分支时,引用日志将使用以 "checkout" 表示的格式,并指定“从 A 移动到 B”。

通过简单的 "checkout: moving" 搜索,您可以获得所访问的分支列表;最后一个分支位于列表的顶部。

为了完整起见,这是完整的命令:

git reflog | grep -i "checkout: moving"

我已经发现可以使用以下命令:git reflog | grep -i "checkout: moving"|head -1|cut -d' ' -f6。但我想知道是否有更直接简单的命令。我更新了问题以反映这个需求。对于没有表述清楚,我感到抱歉。 - Champ

0
使用grep -m限制结果: git reflog | grep -i “checkout: moving” -m 10

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