有没有一种方法可以输出之前的Git分支名称?

18

本答案介绍了如何切换到上一个分支,并有解释@{-1}: https://dev59.com/s2w05IYBdhLWcg3wfx40#7207542

如果在更改分支之前存储了一些代码,并且现在正在考虑处理这些存储的工作,则上一个分支非常重要。

是否有一种快速查看上一个分支名称而不搜索最新的checkout: moving from foo to bar记录的方法是?使用git reflog show命令。


更多信息:

这是我忘记我的上一个工作环境时的解决方案,通常发生在午饭回来后。

git rev-parse @{-1}会显示将由git checkout - 检出的分支的HEAD提交,但不会显示分支名称。

git branch --contains @{-1}将列出包含该提交的所有分支。

列出具有该提交作为HEAD的分支()将很有帮助,因为它可以帮助提醒我以前的工作环境,但我不知道如何做到这一点。

2个回答

16

如果你只想要名称,你可以使用:

git rev-parse --symbolic-full-name --abbrev-ref=loose @{-1}

例如,代码如下:
$ git checkout mybranch
$ git checkout master
$ git rev-parse --symbolic-full-name --abbrev-ref=loose @{-1}
> mybranch

它比被接受的答案更好,因为它在名称中不显示“heads”,所以可以与其他git命令链接使用。

警告

之前的答案正在使用

git name-rev $(git rev-parse @{-1}) --name-only

这仅在分支具有不同提交时才有效。否则可能会返回错误的分支。


3
好的!git name-rev @{-1} --name-only 也可以使用。 - byohay

13

也许这就是您想要的内容:

git describe --all $(git rev-parse @{-1})

来自 git-describe 手册:

--all

不仅使用带注释的标签,还使用 refs/ 命名空间中找到的任何引用。此选项允许匹配任何已知分支、远程跟踪分支或轻量级标签。

例如,如果我这样做:

$ git checkout mybranch
$ git checkout master
$ git describe --all $(git rev-parse @{-1})

我明白了:

heads/mybranch

4
好的,谢谢!我能够使用 git describe --all @{-1} 并得到相同的结果。 - Henry Blyth
获取 fatal: Not a valid object name @{-1} :( - Hlung
1
@{-1} 指的是“当前分支/提交之前检出的第n个分支/提交”。如果您只使用过一个分支(例如 master),那么就没有“上一个分支”,您将会得到您所描述的错误。尝试执行 git checkout -b testbranch,然后查看 @{-1} 指的是什么。 - larsks

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