没有提交的git分支

时间:2014-02-28 03:01:13

标签: git bash

你会认为这不是一个常见的用例,但我经常创建新的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 repos中也是如此(这是一个想法)。然而,一个抱怨很多的案例是一个没有提交的git仓库。特别是我得到:

  

致命:含糊不清的论点'HEAD':未知的修订或路径不在工作树中。   使用' - '将路径与修订分开,如下所示:   'git [...] - [...]'

这提出了至少两个问题:

  1. 为什么即使我通过stderrstdoutnull重定向到2>/dev/null > /dev/null
  2. ,也会显示此错误
  3. 即使没有提交,我怎样才能获得当前的分支名称?

3 个答案:

答案 0 :(得分:2)

在一个空的仓库中,HEAD附加到一个不存在的分支上,因此git rev-parse无法获得转换[解释不一定是导致代码投诉的原因] 。但是git symbolic-ref并不关心SHA,所以

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

看起来不会比这更远,但git symbolic-ref如果HEAD没有附加到某个分支则会失败,因此echo会保留您的{{1}}目前的行为。

答案 1 :(得分:0)

为什么不使用__git_ps1命令?
最初是为了向PS1添加这些信息,你也可以从提示中使用它。

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

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

只需调用此方法打印当前分支:

__git_ps1 '%s\n'

参数是格式化的字符串。 %s被分支的名称取代 如果$PWD不在git repo中,则该命令不提供任何输出。

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

答案 2 :(得分:0)

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

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

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