【问题标题】:Can't change my master branch to main locally无法将我的主分支更改为本地主分支
【发布时间】:2022-01-06 17:50:14
【问题描述】:

我真的需要一些关于分支重命名的帮助。

不幸的是我不能用主分支在github上推送,我必须使用主分支,因为我不能在本地更改我的分支名称。

我需要提交一次才能使用此命令:git branch -M main

但是如果我创建一个新文件并放入一个 git init,显示分支将是 master 并且运行 git branch -M main 将导致我出现此错误: error: refname refs/heads/master not found fatal: Branch rename failed

我想知道是否有任何其他方法可以在本地将分支重命名为 main,而无需在每次创建文件后手动重命名。

非常感谢。

【问题讨论】:

  • 您需要同时指定sourcetarget 分支:git branch --move master main
  • 您说您需要提交一次,但您似乎没有这样做。
  • 如果你不能使用“main”而必须使用“master”,你为什么要尝试将你的分支从“master”重命名为“main”?

标签: git git-branch main git-push master


【解决方案1】:

TL;DR

提交,或使用git checkout --orphan main(或git switch --orphan main),或使用git init -b main(如果有)。

长篇

在一个全新的、完全空的 Git 存储库中,Git 处于一种有点奇怪的状态:

  • mastermain 这样的分支名称 必须包含一些有效的现有提交的哈希ID。
  • 尚无提交。

因此,还不能存在分支名称。

尽管如此,例如,git status 会告诉您您是on branch master。这是一种奇怪的状态:你在一个不存在的分支上

在最新版本的 Git 中,git branch -mgit branch -M(两者都重命名了一个分支)进行了智能处理,以便他们可以重命名这个不存在的分支。如果您有这些最新版本的 Git(2.30 或更高版本)之一,git branch -m main 将在此状态下工作。

然而,旧版本的 Git 只允许您重命名实际存在的分支。所以在这种情况下,要使用git branch -m main,你必须如你所说:

提交一次

注意,你只需要make 一个 commit,这样commit就存在了,分支名就存在了。 在此状态下创建提交的行为创建了分支名称。分支名称在那里,只是它不存在。然后你运行git commit,现在分支名称就在那里并且确实存在。您刚刚做出的新提交是一个 root 提交: 一个没有父提交的提交。仅此而已。

您不必使用git branch -m 来重命名这个未诞生的分支。如果您确实想使用git branch -m 来重命名它,它必须是现有 分支,但您可以在它存在之前重命名它。您只需要在 2.30 之前的 Git 版本中使用其他命令即可。

在 Git 2.28 或更高版本中,git init 采用 --initial-branch(或简称为 -b),它允许您指定不存在但您正在使用的分支的名称。所以git init -b main 成功了。

如果您的 Git 早于 2.28,您可以像往常一样运行 git init,然后使用带有 --orphan 标志的 checkout 或 switch 命令。这将创建一个尚不存在的分支。这个标志从 Git 1.7.2 开始就起作用了:它的目的是重新创建你在一个不存在的分支上的特殊状态。然后,您所做的 next 提交会创建该分支,方法是创建根提交并将新提交的哈希 ID 像往常一样存储在分支名称中。哈希 ID 的存储创建了分支名称,现在解决了位于不存在的分支上的特殊情况。

请注意,当您在一个不存在的分支上并使用git checkout --orphan 时,您会更改不存在的分支的名称。旧名称仍然不存在,因此您 将要创建具有未来提交的分支的事实现在被遗忘了:Git 不知道 master 从未出现过,并且赢了不要去创造它。它将改为创建这个尚不存在的 other 名称。

【讨论】:

    【解决方案2】:

    在提交之前在本地将名称从 master 更改为 main。请按照以下步骤操作:-

    1. 导航到您的项目所在的目录。

    2. 它会显示隐藏文件,因为默认情况下,.git 会被隐藏。

    3. .git里面有一个文件HEAD,用文本编辑器打开。

    4. 你会看到,ref: refs/heads/master

    5. ref: refs/heads/master中的master改为main。

    它将主分支重命名为main。

    【讨论】:

    • 可以这样做,但git checkout --orphan main 更容易。
    猜你喜欢
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2020-08-07
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多