没有提交的 git 分支



你会认为这不是一个常见的用例,但我经常创建新的git存储库。 本质上,我有一个 shell 脚本,可以通过以下方式将当前分支存储到$CURRENT_BRANCH中:

#!/bin/sh -e
git rev-parse --is-inside-work-tree 2>/dev/null > /dev/null
git rev-parse --abbrev-ref HEAD

这很好用,即使在非 git 存储库中也是如此(这就是这个想法)。 但是,它抱怨很多的一种情况是没有提交的 git 存储库。 具体来说,我得到:

致命:模棱两可的参数"HEAD":未知修订或路径不在工作树中。 使用"--"将路径与修订分开,如下所示: "哎呀

这至少提出了两个问题:

  1. 为什么即使我通过2>/dev/null > /dev/nullstderrstdout重定向到null,也会显示此错误
  2. 即使没有提交,如何获取当前分支名称?

在空存储库中,HEAD附加到不存在的分支,因此git rev-parse无法获得 rev [该解释不一定是导致代码抱怨的原因]。 但是git symbolic-ref从不关心SHA所以

git symbolic-ref -q --short HEAD || echo HEAD

附加HEAD不会比这更远,但是如果HEAD没有附加到分支,则git symbolic-ref会失败,因此echo会保留您当前的行为。

为什么不使用 __git_ps1 命令?
它最初是为了将此类信息添加到PS1,当然您也可以从提示使用它。

我正在使用它在我的提示符中显示当前的 git 分支:

PS1="$(__git_ps1 '(%s) ')${PS1}"

只需调用以下命令即可打印当前分支:

__git_ps1 '%sn'

参数是格式化字符串。 %s将替换为分支的名称。
如果$PWD不在 git 存储库中,则该命令不会提供任何输出。

你需要 git 的 bash 完成才能定义该版本。它位于这里/usr/lib/git-core/git-sh-prompt

您创建了哪种存储库?它是否是裸存储库,您是否在裸存储库中运行这些命令?运行"git 分支"会向你显示任何分支吗?

在裸存储库中,它不会获取任何有用的信息,也不建议在其中运行任何直接操作。理想情况下,我会克隆一个裸存储库,然后在其中执行空提交以开始使用,以便创建分支名称(默认情况下为"master")。现在,如果您希望更改分支的名称。来到你遇到的错误,当我克隆一个裸存储库并且没有在其中创建任何分支时,我可以在我最后重现它。

或者,您在遇到此问题时是否创建了孤立分支。

相关内容

  • 没有找到相关文章

最新更新