删除具有大小写冲突的 Git 分支

rea*_*sgt 1 git

我不小心创建了一个与现有分支同名的分支,但大小写不同:

$ git branch
* master
  issue_fix
$ git branch issue_Fix
Run Code Online (Sandbox Code Playgroud)

我尝试使用git branch列出分支,但收到此错误:

fatal: Reference has invalid format: 'refs/heads/issue_fix (Case Conflict)'
Run Code Online (Sandbox Code Playgroud)

我认为 git 在转换为小写后试图创建分支,但这是一个冲突。检查分支引用:

$ ls .git/refs/heads/
master
issue_fix
issue_fix (Case Conflict)
Run Code Online (Sandbox Code Playgroud)

并在参考日志中

$ ls .git/logs/refs/heads/
master
issue_fix
issue_fix (Case Conflict)
Run Code Online (Sandbox Code Playgroud)

我不能删除 git branch -D

$ git branch -D "issue_fix (Case Conflict)"
error: branch 'issue_fix (Case Conflict)' not found.
Run Code Online (Sandbox Code Playgroud)

只是删除".git/logs/refs/heads/issue_fix (Case Conflict)"和安全".git/refs/heads/issue_fix (Case Conflict)"吗?

rea*_*sgt 5

我在 Dropbox 文件夹中有我的 repo,这通常是个坏主意。(Case Conflict)是 Dropbox 对两个具有相同小写名称的文件的标记。

当我创建一个大写字母的分支时,Dropbox 将其重命名为小写并添加冲突标记。

我通过删除对分支的引用解决了这个问题,但我也应该避免将我的 repo 保存在 Dropbox 文件夹中。它可以做比这更糟糕的事情。

删除 withgit branch -D不起作用,因为文件名格式错误。

我手动删除了文件:

$ rm ".git/logs/refs/heads/issue_fix (Case Conflict)"
$ rm ".git/refs/heads/issue_fix (Case Conflict)"
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否完全安全。