删除名称包含奇怪字符的分支

Deleting branches which name contains weird characters

我使用Git Bash,错误地创建了一个名为-D 的分支。 用 Google 搜索后,我尝试了

git branch -d -- -D 

获得

error: branch '-D' not found. 

我也尝试将其从 gitk 中删除,但没有成功。

另一方面,我注意到如果我从控制台输入 git branch 或在 gitk 上显示它,分支名称会发生​​变化。比如console里的分支是-D,但是在gitk上却用奇怪的字符命名。

Branch name obtained with git log

Branch name displayed in gitk

这时候我copied/paste把奇怪的名字从gitk传到控制台,然后我发出

git branch -d â?"D

没有成功。

但是,我收到警告消息:"Warning: Your console font probably doesn't support Unicode. If you experience strange characters in the output, consider switching to a TrueType font such as Lucida Console!"

作为最后一次尝试,我尝试从 gitk 中删除该分支,但我得到一个弹出窗口 window 说 "error: branch yet another weird and longer name not found"。

这一次,我无法从弹出框复制并粘贴 另一个奇怪且更长的名称 到控制台,因为我无法从弹出框复制 window.

用引号扭曲分支名称

git branch -D "-D"

其他选项

如果您在本地拥有该文件,您只需从 .git/ref/heads/branch_name 文件夹中删除该文件即可。

从 gitk 截图来看,分支名称中的连字符不是常规的 ASCII 连字符(ASCII 码 45),而是 Em dash, encoded as UTF-8, and then interpreted (by gitk) with character encoding Windows-1252(又名 "Codepage 1252")。

Em 破折号的 Unicode 代码点为 2014,可转换为 UTF-8 字节序列 E2 80 94。如果将这三个字节解释为 Windows-1252,您将获得三个字符 –(Unicode 代码点 "LATIN SMALL LETTER A WITH CIRCUMFLEX"、"EURO SIGN"、"RIGHT DOUBLE QUOTATION MARK")——这就是gitk 显示(显然 gitk 在您的系统上默认为字符编码 Windows-1252)。


要删除此分支,您需要在某处获取一个 Em 破折号。一种方法是启动 Windows 写字板(或 Microsoft Word),然后键入 Alt 0151(必须使用数字键盘!)。

输入 Em 破折号。复制该字符,然后将其粘贴到您的 git shell 到此命令中,在 "D":

之前

git branch -d 'D'

输入,大功告成:-)。

使用 Git 2.29(2020 年第 4 季度),考虑到它已经学会处理分支名称中的 Unicode 字符,您现在应该能够 delete that branch from gitk directly

参见 commit e244588 (10 Sep 2020) by Denton Liu (Denton-L)
参见 commit a99bc27 (15 Dec 2019), and commit f177c49 (02 Nov 2019) by Роман Донченко (SpecLad)
参见 commit 2faa6cd (09 Apr 2020) by Johannes Sixt (j6t)
参见 commit c1a6345 (15 Oct 2019) by Eric Huber (echuber2)
参见 commit b8b6095 (12 Dec 2019) by Beat Bolli (bbolli)
参见 commit e2b9cb1 (03 Oct 2020), and commit e272a77 (23 Jan 2020) by Junio C Hamano (gitster)
参见 commit 6cd8049 (03 Oct 2020) by Paul Mackerras (paulusmack)
参见 commit 113ce12 (11 Feb 2020) by Stefan Dotterweich (stefandtw)
参见 commit d4247e0 (07 Dec 2019) by Kazuhiro Kato (kkato233)
(由 Junio C Hamano -- gitster -- in commit 0cf28f6 合并,2020 年 10 月 5 日)

gitk: fix branch name encoding error

Signed-off-by: Kazuhiro Kato
Signed-off-by: Paul Mackerras

After "git checkout -b '漢字'"(man) to create a branch with UTF-8 character in it, "gitk" shows the branch name incorrectly, as it forgets to turn the bytes read from the "git show-ref"(man) command into Unicode characters.