git 为什么我不能创建主分支?

f45qwnt8  于 2022-11-20  发布在  Git
关注(0)|答案(2)|浏览(534)

有人能解释一下我做错了什么吗?

$ git --version
git version 2.18.2

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

$ git branch
* (HEAD detached at origin/trunk)

$ git branch -m master
fatal: Invalid branch name: 'HEAD'

一些背景:此存储库是使用git svn创建的,我希望将origin/trunk分支重命名为master

$ git branch -a
* (HEAD detached at origin/trunk)
  remotes/origin/svn-branch1
  remotes/origin/svn-branch2
  ...
7rtdyuoh

7rtdyuoh1#

TL;DR的名称

用途:

git checkout -b master origin/trunk

然后执行任何操作将此Git仓库复制到其他地方。如果 * 您不打算进一步导入SVN,请随意删除远程跟踪名称origin/trunk

git branch -d -r origin/trunk

如果愿意,可以对每个SVN分支名称重复此操作。

您需要了解的一些事项:
1.你没有 * 任何 * 枝,此刻一声:

$ git branch
* (HEAD detached at origin/trunk)

1.你 * 确实 * 有一些 * 远程跟踪名称 *(Git调用这些 * 远程跟踪分支名称 *,但它们不是 * 分支名称 *,所以我在这里省略了 * 分支 * 一词)。

$ git branch -a
* (HEAD detached at origin/trunk)
  remotes/origin/svn-branch1
  remotes/origin/svn-branch2

第一行当然是重复的,但它表明有一个remotes/origin/trunk,这里多出来的单词remotes来自于这样一个事实,即每个单词的 * 全名都是refs/remotes/origin/*name*; Git通常会省略refs/remotes/,除了git branch -a只在远程跟踪名称上省略了refs/(没有明显的原因)。
现在,git checkout不会自动创建一个(本地)分支名称,除非有一个匹配的远程跟踪名称。
通常情况下,远程跟踪名称存在于您的Git仓库中是因为 * 分支 * 名称存在于其他Git仓库中。如果是这种情况,您需要在其他Git仓库中重命名这些分支。但在您的示例中,(还)没有其他Git仓库-只有一个SVN仓库。在SVN仓库中,有一个名称trunk,您的转换将该名称复制到了这里。
你需要做的是创建一个本地分支名master,最简单的命令是git checkout -b master *starting-point*,因为它也会把你 * 放在 * 那个分支上(你可能需要的),起点是你希望这个新名字master引用的提交。
1在这里,单词 * 分支 * 表示 * 分支名称 *。在Git的其他上下文中,它表示其他内容。Git分支与SVN分支并不完全对应。另请参阅What exactly do we mean by "branch"?

mpgws1up

mpgws1up2#

在Git 2.39(Q4 2022)中,错误信息会更清晰:

cannot rename the current branch while not on any

2022年10月26日,Rubén Justo ( rjusto )发布。
(由Taylor Blau -- ttaylorr --合并至commit 0c02561,2022年10月30日)
第1001章:复制或重命名分离的HEAD时出错
签署人:鲁本·胡斯托
c847f53(“分离的HEAD(实验性)",2007-01-01,Git v1.5.0-rc 1--merge)中,rename_branch()中引入了一个错误条件,以防止重命名分离的HEAD,随后也会复制分离的HEAD。
使用的条件是检查oldname中的NULL,即要重命名/复制的源分支。
无法满足该条件,因为如果未指定源分支,则将在调用中使用HEAD。
而发出的错误为:

fatal: Invalid branch name: 'HEAD'

让我们删除copy_or_rename_branch()(当前函数名)中的条件,并在调用它之前检查HEAD,如果我们在一个分离的HEAD中,则会出现最初预期的错误。

相关问题