在本地和远程 git 存储库上将分支从大写重命名为小写时出现问题

Shr*_*ugo 2 git git-branch

由于我是 git 的新手,我不知道将分支名称设置为小写是一个好习惯,所以我最终将其设置为大写。所以现在我正在尝试重命名该分支并尝试了此处建议的内容,但没有成功。

我也尝试过的命令

git branch -m newfeature
git branch -m NEWFEATURE newfeature
Run Code Online (Sandbox Code Playgroud)

当我尝试上述命令时出现的错误是

fatal: A branch named 'newfeature' already exists
Run Code Online (Sandbox Code Playgroud)

kos*_*tix 6

两点:

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

    原因是 Git 中的(“新鲜”)分支存储为普通文件,这些文件的名称就是它们所代表的分支的名称。在不区分大小写的文件系统上,名称“foo”、“FOO”和“FoO”被视为引用同一个文件,因此如果名称为“WHATEVER”的文件已存在于文件系统中,则不可能创建名为“whatever”的文件。同一目录。

  • 要在使用命令时强制重写分支git branch -m,您可以使用其大写版本:git branch -M即使目标分支存在,也会替换它。

回顾一下,重命名分支的最简单方法是使用一些当前未采用的中性名称:

git branch -m temp newfeature
git branch -m newfeature NEWFEATURE
Run Code Online (Sandbox Code Playgroud)

另请注意,如果您只关心已推送的分支的名称,您可以远程重命名它:命令

git push origin WHATEVER:refs/heads/whatever :refs/heads/WHATEVER
Run Code Online (Sandbox Code Playgroud)

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

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