有人可以在这里解释我在做什么错吗?
$ 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
...
答案 0 :(得分:1)
使用:
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)
您要做有一些远程跟踪名称(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"?