为什么我不能创建master分支?

时间:2020-06-18 18:51:56

标签: git git-svn

有人可以在这里解释我在做什么错吗?

$ 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
  ...

1 个答案:

答案 0 :(得分:1)

TL; DR

使用:

git checkout -b master origin/trunk

然后执行将您的Git存储库复制到其他位置的任何操作。如果您不打算进一步导入SVN,请随时删除远程跟踪名称origin/trunk

git branch -d -r origin/trunk

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

您需要了解的一些事情

  1. 您目前没有任何个分支, 1

    $ git branch
    * (HEAD detached at origin/trunk)
    
  2. 要做有一些远程跟踪名称(Git称这些为远程跟踪分支名称,但它们不是< em>分支名称,因此我想在这里省略 branch 一词。您的SVN导入创建了以下内容:

    $ 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不会自动创建一个(本地)分支名称,除非有一个匹配的远程跟踪名称。 SVN导入虽然创建了origin/master,但并未创建origin/trunk

通常,由于其他一些Git存储库中存在分支名称,因此Git存储库中存在远程跟踪名称。如果是这种情况,则需要在另一个Git存储库中重命名那些分支。但是,在您的情况下,还没有其他Git存储库-只有SVN存储库。在SVN信息库中,有一个名称trunk,您的转换在此处复制了该名称。

您需要做的是创建本地分支名称master。最简单的命令是git checkout -b master starting-point,因为这也会使您上(您可能想要)。起点是您希望此新名称master引用的提交。


1 在这种情况下,单词 branch 表示分支名称。在Git中的其他上下文中,它意味着其他内容。 Git分支与SVN分支不太吻合。另请参见What exactly do we mean by "branch"?