【问题标题】:Get git branch name without prefix获取不带前缀的 git 分支名称
【发布时间】:2018-10-27 11:00:26
【问题描述】:

我有这些分支:

refs/heads/master
refs/heads/feature/dummy

是否有本地 git 命令仅获取分支名称的最后一部分? (上例中为masterdummy

我尝试过git rev-parse --abbrev-ref HEAD,但会得到masterfeature/dummy

【问题讨论】:

  • 您发布的列表中没有名为dummy 的分支。第二个分支的名称是feature/dummy。如果您只使用dummy,Git 无法识别它。尝试运行git checkout dummy 会失败。
  • 你当前所在的分支 feature/dummy
  • @axiac,@evolutionxbox 是的,我知道我在功能/虚拟。我想要的是一个 git 命令来获取dummy,而不是feature/dummy。这是因为我有进一步的处理不适用于正斜杠
  • @evolutionxbox 我对SonarQube 进行了分析,它将自动剥离分支名称的feature/ 部分。然后,我将编写一些代码来访问 Sonar 的 API 以获取分析结果,我需要将短分支名称作为参数传递。不过是的,我可以试试grep或者tokenize,我就是想知道有没有原生的git命令
  • git rev-parse --abbrev-ref HEAD | xargs basename 怎么样?

标签: git git-branch


【解决方案1】:

我认为没有,仅仅是因为 git 允许在分支名称中使用正斜杠。查看git-branch docs 以了解branchname 是如何定义的: 此外,请查看git-check-ref-format docs 以了解如何在需要时限制这一点 (--allow-onelevel)。

考虑到所有这些,我认为 git 将分支名称视为一个整体,包括斜杠,因此它不需要提供任何特定的命令来解析它,但您始终可以将分支名称通过管道传递给另一个工具这将过滤掉它。例如this SO answer 解决这种情况。您可能必须使用类似:value=${str#*/}

【讨论】:

  • 谢谢,我想我需要管道或标记分支名称才能获得最后一部分
【解决方案2】:

以下似乎也有效:

$ git name-rev --name-only refs/heads/master
master

这似乎与您自己提出的rev-parse 解决方案非常相似。它似乎也适用于哈希,例如其中b51e7569master 指向的提交:

$ git name-rev --name-only b51e7569
master

【讨论】:

    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 2023-03-09
    • 2017-08-11
    • 1970-01-01
    • 2011-09-08
    • 2021-06-27
    • 2017-03-16
    相关资源
    最近更新 更多