【问题标题】:Is there a way to output the previous git branch name?有没有办法输出以前的 git 分支名称?
【发布时间】:2017-03-18 10:05:41
【问题描述】:

这个答案告诉了如何结帐到上一个分支,并有助于解释@{-1}https://stackoverflow.com/a/7207542/3150057

如果我在更改分支之前存储了一些代码,那么之前的分支很重要,现在我正在考虑处理存储。

有没有办法在不搜索git reflog show 获取最新的checkout: moving from foo to bar 条目的情况下快速查看上一个分支的名称?


更多信息:

这是解决我忘记以前工作环境的方法,这种情况通常发生在吃完午饭回来之后。

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

git branch --contains @{-1} 将列出具有该提交的每个分支。

将该提交的分支列为 HEAD 会有所帮助,因为它可以帮助提醒我以前的工作环境,但我不知道该怎么做。

【问题讨论】:

    标签: git branch git-checkout git-stash git-reflog


    【解决方案1】:

    也许这就是你想要的:

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

    来自git-describe 手册页:

    --all

    不要只使用带注释的标签,而是使用在 refs/ 中找到的任何 ref 命名空间。此选项可以匹配任何已知的分支, 远程跟踪分支,或轻量级标签。

    例如,如果我这样做:

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

    我明白了:

    heads/mybranch
    

    【讨论】:

    • 就是这样,谢谢!我能够使用git describe --all @{-1} 并得到相同的结果。
    • 获取fatal: Not a valid object name @{-1} :(
    • @{-1} 指的是“在当前分支/提交之前签出的第 个分支/提交”。如果您只使用过一个分支(例如,master),则没有“上一个分支”,您将收到您描述的错误。试试git checkout -b testbranch,然后看看@{-1}指的是什么。
    【解决方案2】:

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

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

    例如:

    $ git checkout mybranch
    $ git checkout master
    $ git name-rev $(git rev-parse @{-1}) --name-only
    > mybranch
    

    它比接受的答案更可取,因为它不会在名称中显示“heads”,因此它可以与其他 git 命令链接。

    【讨论】:

    • 不错! git name-rev @{-1} --name-only 也有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 2011-04-26
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 2010-11-03
    相关资源
    最近更新 更多