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

时间:2016-03-01 10:12:58

标签: git git-branch branching-and-merging

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

git branch -d -- -D 

获得

error: branch '-D' not found. 

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

另一方面,我注意到如果我从控制台输入git branch或者我在gitk上显示它,分支名称会改变。例如,分支在控制台中是-D,但在gitk上以奇怪的字符命名。

Branch name obtained with git log

Branch name displayed in gitk

此时我将奇怪的名字从gitk复制/粘贴到控制台,然后我发出了

git branch -d â?"D

没有成功。

但是,我收到了警告消息:“警告:您的控制台字体可能不支持Unicode。如果您在输出中遇到奇怪的字符,请考虑切换到TrueType字体,例如Lucida控制台!”

作为最后一次尝试,我试图从gitk中删除分支,但是我得到一个弹出窗口,上面写着“错误:分支又找不到另一个奇怪的长名称”。

这一次,我无法将弹出框中的又一个奇怪的长名称复制并粘贴到控制台,因为我无法从弹出窗口复制。

3 个答案:

答案 0 :(得分:4)

使用引号

扭曲分支名称
git branch -D "-D"

其他选项

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

答案 1 :(得分:3)

根据gitk截图判断,分支名称中的连字符不是常规ASCII连字符(ASCII码45),而是编码为UTF-8的Em dash,然后用字符解释(通过gitk)编码Windows-1252(又名“代码页1252”)。

Em dash具有Unicode代码点2014,转换为UTF-8字节序列E2 80 94。如果您将这三个字节解释为Windows-1252,则会获得三个字符 - (Unicode代码点“带有CIRCUMFLEX的LATIN SMALL LETTER A”,“EURO SIGN”,“RIGHT DOUBLE QUOTATION MARK”) - 这就是gitk显示(显然gitk默认为您系统上的字符编码Windows-1252)。

要删除此分支,您需要在某处抓取Em dash。一种方法是启动Windows Wordpad(或Microsoft Word),然后键入 Alt 0 1 5 1 (您必须使用数字小键盘!)。

进入Em破折号。复制该字符,然后在“D”:

之前将其粘贴到您的git shell中
  

git branch -d'D'

输入,你就完成了: - )。

答案 2 :(得分:0)

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

http://wiki.seas.harvard.edu/geos-chem/images/6/6e/GitKDeleteBranch.png

请参见commit e244588Denton Liu (Denton-L)(2020年9月10日)。
请参见commit a99bc27commit f177c49(2019年12月15日)和Роман Донченко (SpecLad)(2019年11月2日)。
请参见commit 2faa6cdJohannes Sixt (j6t)(2020年4月9日)。
请参见commit c1a6345Eric Huber (echuber2)(2019年10月15日)。
请参见commit b8b6095Beat Bolli (bbolli)(2019年12月12日)。
请参见commit e2b9cb1前的commit e272a77(2020年10月3日)和Junio C Hamano (gitster)(2020年1月23日)。
请参见commit 6cd8049Paul Mackerras (paulusmack)(2020年10月3日)。
请参见commit 113ce12Stefan Dotterweich (stefandtw)(2020年2月11日)。
请参见commit d4247e0Kazuhiro Kato (kkato233)(2019年12月7日)。
(由Junio C Hamano -- gitster --commit 0cf28f6中合并,2020年10月5日)

gitk:修复分支名称编码错误

签名人:加藤和宏
签名人:Paul Mackerras

在“ {git checkout -b '漢字'man之后创建带有UTF-8字符的分支后,“ gitk”错误地显示了分支名称,因为它忘记了将从“ git show-refman命令读取的字节转换为Unicode字符。