如何在初始提交之前确定分支名称?

时间:2016-01-01 17:32:10

标签: git

我正在尝试制作一个脚本,用Git简化一些常见任务。 其中,脚本应该能够确定当前分支的名称。如果用户已将某些内容提交到存储库,这可以正常工作,但如果用户尚未进行任何操作,我无法弄清楚如何执行此操作。例如,在空文件夹中:

git init
git checkout -b work

现在我想确定当前分支的名称:(因此预期输出为work

git branch

没有输出。鉴于:

git checkout work

给出

error: pathspec 'work' did not match any file(s) known to git.

git rev-parse --abbrev-ref HEAD

给出输出:

HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path not in the     
working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

然而,

cat .git/HEAD

给了我:

ref: refs/heads/work

但这似乎有点像黑客(窥视私人目录.git)。当用户没有提交任何内容时,是否有任何可移植的方法来确定分支名称?

2 个答案:

答案 0 :(得分:3)

支持的命令告诉您与TcpListener相同的内容cat .git/HEAD。在没有任何提交的新的存储库中,它仍然会打印git symbolic-ref HEAD

答案 1 :(得分:1)

这只是因为你尚未提交任何内容。请注意,还没有master。在git中,分支只是提交的指针,所以没有提交它们就不存在了。一旦您提交了某些内容(自述文件或许可证是一个好的起点),您就可以看到您的分支。

.git/HEAD输出您期望的原因是它基本上是指向分支的符号链接,即使该分支不存在。这是创建新孤立分支的承诺部分(孤立分支是在没有先前存在的提交的情况下创建的任何分支,因此在git initgit commit之间创建的所有分支都是孤立分支):任何{{ 1}}在分支不存在的情况下运行将在git commit引用的分支上创建,如果它尚不存在则创建该分支。

如果要在不运行.git/HEAD的情况下确定指向.git/HEAD的内容,可以使用命令cat .git/HEAD。如果您只想要实际的分支名称,可以传递git symbolic-ref HEAD标记:--short