如何创建子分支?

27

我的git仓库有两个分支,masterbug。我想创建一个名为bug/rep的分支。所以我运行:

git branch bug/rep

这会导致错误:

错误:无法解析引用refs/heads/bug/rep:不是目录 致命错误:无法锁定引用'refs/heads/bug/rep'。

我该如何从分支bug创建一个子分支,例如bug/rep? 我的Mac上的git版本是2.3.2。

2个回答

51
在Git中,分支对应着位于.git子目录层次结构中的实际文件。如果你创建一个名为“bug/sub”的分支,Git首先会创建一个名为“.git/refs/heads/bug”的文件夹(如果它不存在),并在该文件夹中创建一个名为“sub”的文件,即这个分支。分支名称被认为是在“.git/refs/heads”中解析的,因此“refs/heads”+“bug/sub”将解析为文件系统中的实际位置。
你遇到的问题源于你的文件系统。由于你已经有了一个名为“bug”的分支,在“.git/refs/heads”中已经有一个名为“bug”的文件。按照上述方法创建子分支需要文件系统创建一个名为“bug”的新文件夹,但它无法这样做,因为那里已经有一个名为“bug”的文件。
简而言之,你可以创建一个分支层次结构,但是层次结构的更高层级节点不能成为自己的分支。

5

创建新的子分支:
git checkout -b <sub-branch-name>
// 在推送时自动创建子分支
推送文件到之前创建的子分支:
git push -u origin <sub-branch-name> -u 用于设置上游参数


这里的 origin 是主分支,添加了

git add remote origin master https://github.com/<ur-name>/repoName.git

查看分支的名称

git branch

4
提供信息:我不信任你的答案的原因是它没有清楚地说明如何使这个分支成为子分支,而不仅仅是从主分支分离出来。并不是说你错了(因为我是github的新手),只是作为一个新手,这个答案没有给我足够的温暖和舒适的感觉来使用它。来源:我现在正在尝试创建一个子分支,到目前为止只创建了从主分支分离出来的分支。 - PESMITH_MSFT
8
这是错误的。这只是有关如何创建任何分支的通用信息。它不会像你要求的那样创建子分支。 - Ned Martin
确实,这显然不是问题的答案。也许可以改进答案,展示如何使用命令创建子分支?这将是对@Daniel Kessler答案的很好补充。 - Ralph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接