Git 分支删除删除我的分支,当名称以不同的大小写写时,我目前在该分支

Jar*_*eňo 5 git

我刚刚创建了一个名为 daco 的新分支。

git checkout -b daco
Run Code Online (Sandbox Code Playgroud)

然后我尝试删除它。我知道这会出错,而且确实如此。

git branch -D daco
Run Code Online (Sandbox Code Playgroud)

错误:无法删除分支“daco”

但是当我尝试以这种方式删除时:

git branch -D Daco
Run Code Online (Sandbox Code Playgroud)

它被删除没有问题。

你知道为什么吗?

在此处输入图片说明

Lev*_*ell 3

它\xe2\x80\x99是不区分大小写的文件系统的产物,就像Windows上的那样。Git 在内部将分支存储为.git/refs文件夹内的文件和目录。

\n

因此,当您创建名为 的分支时,会在该文件夹内创建foo一个名为 的文件。由于您是通过命令完成的,因此 git 还会记录现在已签出的分支。因此,当您尝试删除分支时,git 会看到这是已签出的分支并给出错误。foorefs/headscheckoutfoofoofoo

\n

现在,当您尝试删除名为 的分支时,git 首先检查文件夹中Foo是否存在名为 的文件,这就是它变得奇怪的地方:Foorefs/heads

\n

由于您的文件系统不区分大小写Foo因此作为文件名, 是等效的foo。因此,文件系统会报告该路径refs/heads/Foo存在,而实际上它\xe2\x80\x99s refs/heads/foo。但是,当 git 检查是否Foo是签出分支时,它会发现不是Foo签出分支,因为 git 内部是区分大小写的,因为它不等于。因此,git 错误地确定:是一个现有分支,与 不同,并且不是已出分支。因此,git 允许你删除.foo"Foo""foo"fooFooFooFoo

\n