【问题标题】:Issue while renaming a branch from uppercase to lowercase on local and remote git repos在本地和远程 git repos 上将分支从大写重命名为小写时出现问题
【发布时间】:2020-04-28 10:09:52
【问题描述】:

由于我是 git 新手,所以我不知道将分支名称小写是一个好习惯,所以我最终将其改成了大写。所以现在我正在尝试重命名分支并尝试了here 的建议,但没有运气。

我也尝试过的命令

git branch -m newfeature
git branch -m NEWFEATURE newfeature

我尝试上述命令时遇到的错误是

fatal: A branch named 'newfeature' already exists

【问题讨论】:

  • 第一个命令运行时的输出是什么?
  • @mnestorov 这两个命令的错误相同。
  • 如果您运行git branch -a 并查看您的分支名称,那么您是否有这样的分支已经存在?
  • @mnestorov 是的,它确实存在,但大写
  • 你能用-M选项试试吗,因为你可能在Windows上。由于 Windows 对此类事情区分大小写,因此您需要强制移动。

标签: git-branch git


【解决方案1】:

两点:

  • 如果您的 Git 存储库位于不区分大小写的文件系统上(例如,Windows 上具有默认设置的 NTFS 或 MacOS 上的 HFS[+]),任何将分支重命名为自身的大小写不同版本的尝试都将失败。

    原因是 Git 中的(“新鲜”)分支存储为普通文件,这些文件的名称是它们所代表的分支的名称。 在不区分大小写的文件系统上,名称“foo”、“FOO”和“FooO”被认为是指同一个文件,因此如果名为“WHATEVER”的文件已经存在于同一个目录。

  • 要在使用git branch -m 命令时强制改写一个分支,您可以使用它的大写版本:git branch -M 将替换目标分支,即使它存在。

回顾一下,重命名分支的最简单方法是通过一些当前未采用的中性名称对其进行跳转:

git branch -m temp newfeature
git branch -m newfeature NEWFEATURE

还要注意,如果你只关心你推送的分支的名字, 你可以远程重命名它:命令

git push origin WHATEVER:refs/heads/whatever :refs/heads/WHATEVER

将推送本地分支“WHATEVER”以在称为“origin”的远程仓库中创建一个名为“whatever”的分支,然后删除那里的名为“WHATEVER”的分支。

如果本地的“WHATEVER”包含与以相同名称推送到“origin”的相同历史记录,则该命令甚至不会传输任何数据。

【讨论】:

    【解决方案2】:

    git 告诉你newfeature 已经存在的原因是因为使用第一个命令,你已经将分支重命名为newfeaturegit branch -m newfeature 命令会将您的当前分支移动到newfeature 分支名称。

    所以这两个命令都是正确的,你只是第一次就这样做了。

    注意:如果您使用的是具有区分大小写文件系统的 Windows,您需要传递 -M 选项。代表--move --force强制重命名。

    您可以使用

    查看所有分支
    git branch -a
    

    看看他们叫什么名字。

    【讨论】:

    • 当第一个命令给我同样的错误时,我尝试了第二个命令。第二个命令给出了同样的错误。
    • @Shrugo 请查看编辑,因为它可能与您的情况有关。
    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 2016-08-28
    • 2015-08-15
    • 1970-01-01
    • 2016-05-15
    相关资源
    最近更新 更多