Git:重命名本地分支失败。

156

我不知道为什么我的本地分支重命名尝试失败了。我基本上是克隆了这个项目,然后我还有一个子模块在项目中,我也下载了子模块的代码。然而,当我在子模块中使用git branch时,我得到了以下结果:

* (no branch)
  master

代码看起来好像我在另一个分支上,但输出显示它没有名称。然后我在网上搜索了如何重命名本地分支,我找到了下面这个:

git branch -m <newname>

运行此命令后,git 给了我以下错误:

error: refname refs/heads/HEAD not found
fatal: Branch rename failed

有人知道这是为什么发生的吗?谢谢。

10个回答

291

我也遇到了这个问题。原因是我在这个git仓库里没有任何提交记录。

当我运行命令git branch -M main时,我收到了以下错误信息。

error: refname refs/heads/master not found
fatal: Branch rename failed

使用以下命令提交第一个版本后,一切都正常运行。

git add .
git commit -m 'Init'

1
这就是我一直在寻找的解释。由于上下文模糊,所以我并不惊讶会有其他答案,但是你做得很好,谢谢! - Matthew Wolman
29
Github 应该考虑将这部分内容加入他们的指南中。 - SuperCode
1
是的,这就是罪魁祸首! - ruslaniv
另一种选择是手动编辑.git/HEAD文件,将其内容更改为ref: refs/heads/main而不是refs/heads/master - jyn
这个有效,是我自己忘了。不错。 - Sanjay
显示剩余2条评论

125

您当前处于分离头状态。您必须检出一个新分支以将其与当前提交相关联:

git checkout -b new_branch

你是正确的!我认为 Git 不会识别与一个分支同名的分支,而你的命令正在创建一个新分支,但事实证明它可以工作。谢谢。 - Shang Wang
这个解决方案在我认为无关的情况下也适用。我创建了一个新的git仓库,在没有任何提交的情况下尝试重命名主分支,结果得到了相同的错误消息。使用git checkout -b newbranch有效地重命名了主分支。我猜这意味着在新的存储库中进行第一次提交之前,您处于“分离头状态”。 - frederickjh
1
@frederickjh:不,创建新存储库时,默认情况下您在“master”分支上。但是,如果尚未提交任何内容,则可能无法重命名主分支。 - knittl
@knittl,确实当您创建一个新仓库时,您位于主分支上。这正是我的情况。当没有提交时,就没有指向 refs/heads/HEAD 的引用,这就是为什么在尝试重命名分支时会显示错误消息的原因。所以这是一个“游离头部状态”吗?由于没有指向 HEAD 的指针,可能是这样,但我将把它留给 Git 专家来解决!双关语意味深长。 - frederickjh
如果你刚创建了一个仓库并想要推送你的代码,请使用基本命令 -> git init -> git add remote .. -> git commit -m "first commit" -> git push -u origin master - Md omer arafat

32

我认为这是因为"git init"命令创建的master分支和GitHub上的(新)"main"分支发生了冲突。

之后:

git add .
git commit -m "first commit" 

我能够执行 git branch -M main

enter image description here


13

您可以在提交之前,在本地进行几个步骤,将名称从 master 更改为 main 。

  1. 导航到项目所在的目录。
  2. 在该目录中,显示隐藏文件,因为默认情况下,.git 将被隐藏。
  3. .git 内,有一个名为 HEAD 的文件,请在文本编辑器中打开它。 您会看到 ref:refs / heads / master 。
  4. 很简单,将 master 更改为 main 。

    我们刚刚将主分支重命名为主。仅通过在终端输入 git branch 来验证此操作。


这正是我所寻找的,谢谢! - Geoff Davids

9

首先使用以下命令设置您的电子邮件和用户名配置:

git config --global user.email “you@example.com”
git config --global user.name “Your Name”

然后添加您的文件:

git add .

然后进行第一次提交:

git commit -m "Initial commit"

现在运行以下命令:

git branch -M main

我用这种方式成功了。


7
我的猜测是你不在一个名为“(no branch)”的分支上,而是没有在任何分支上。
如果你首先检出主分支:
git checkout master

然后创建一个新分支:

git checkout -b new_branch

那样会使它看起来像你预期的那样。

2

在您提交并添加文件之前,您需要进行一些更改。否则,您仍将收到此消息。

如果您没有进行任何更改,请进行一些更改或创建一个空白文件。

touch blank.txt

然后

git commit -m "Project Init"
git add .

2

我之前也遇到过这个错误,但我通过以下操作解决了它: git commit -m"你的提交信息" 然后再运行: git branch -M main 就可以正常工作了。


2

I also facing the same issue.

您可以运行以下命令从 master 切换到 main。

git add .
git commit -m "Init"
git branch -m main

running the above code

Finally switch from master to main


-2

试试这个:

  1. git config --global user.email “你的邮箱”

  2. git config --global user.name “你的用户名”

  3. git commit -m "使用Tailwind的TypeScript React"

  4. git branch -M main

  5. git push -u origin main

应该可以工作!:)


这是@ Charan Shetty现有答案的副本。在回答已经有答案的旧问题时,请确保您提供的是新颖的解决方案或比现有答案更好的解释。记得先查看所有现有答案。 - tjheslin1
这个答案不好,因为它没有解释为什么它会起作用。 - Saif Al Falah

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