删除名称错误的 git 分支

问题描述 投票:0回答:7

我知道这严格来说不是一个编程问题,但它与 git 有关。我不小心在 git 中创建了一个名为

--track
的分支(合并远程分支时选项顺序错误)

常规命令不起作用:

git branch -D "--track"  

我尝试用引号和反斜杠转义,但是都不起作用。

有什么想法吗?

git git-branch
7个回答
117
投票

你尝试过吗

git branch -D -- --track

? “

--
”通常是“无论其名称如何,接下来的内容都不是一个选项”的约定


来自“Unix 编程的艺术”,“命令行选项”部分:

按照惯例,将双连字符识别为停止选项解释并按字面意思处理所有后续参数的信号。

您会在其他(不一定与 Unix 相关)CLI(命令行界面)中找到该约定,例如 cleartool:

如果非选项参数以连字符 (

) 字符开头,您可能需要在其前面添加双连字符参数,以防止其被解释为选项:

cleartool rmtype -lbtype -- -temporary_label- 

P18(一种快速灵活的文件预处理器,具有宏处理功能和对国际化的特殊支持)也提到了这一点,并很好地描述了该约定背后的总体思想:

传递给命令的所有选项参数均以单个连字符开头。

所有选项参数(如果有)必须位于所有非选项参数之前。
选项参数的结尾可以使用
双连字符来表示,如果非选项参数以连字符开头,这非常有用。用双连字符终止选项参数列表适用于所有命令,即使是那些不带任何选项参数的命令。

用 ruby 编写的

OptionParser 工具也非常清楚地列出了它:*

选项解析终止

按照惯例,双连字符是停止选项解释并按字面意思读取命令行上剩余语句的信号。因此,命令如下:

app -- -x -y -z

不会“看到”三个模式标志。相反,它们将被视为应用程序的参数:

#args = ["-x", "-y", "-z"]


注意:有时,它需要三个破折号而不是两个,特别是当 CLI 严格遵循 Gnu 选项样式时:

Gnu 风格命令行选项提供对选项字(或关键字)的支持,但仍保持与 Unix 风格选项的兼容性。

这种风格的选项有时称为
long_options

,Unix 风格的选项称为 short_options
通过在 long_options 前面加上两个破折号来保持兼容性

与 Unix 风格的双连字符“

--

”类似,Gnu 风格有一个三连字符“
---
”来表示选项解析停止并将剩余文本视为参数(即从字面上读取)命令行)

所以...如果 '

--

 ' 还不够(应该使用 Git 命令),请尝试 ' 
---
 '


8
投票
git branch -D -- --track
    

5
投票
我正在使用 msysgit 1.7.0.2,建议的解决方案不起作用:

git 分支 -D -- --track # 不起作用

没有报错,但是分支依然存在。我最终通过以下方式强行删除了分支:

rm .git/refs/heads/--track


2
投票
双连字符在远程上对我来说不起作用,分支名称包含双引号和&符号。 然而,包装名称引号并转义所包含的引号就完成了这项工作:

git push origin --delete "123-my-branch-&-some\"quoted-text\""

本地:

git branch -D "123-my-branch-&-some\"quoted-text\""
    

1
投票
你可以使用软件:sourcetree,它可以删除你喜欢的任何分支。


0
投票
我遇到了类似的问题,我不小心得到了“-r”分支。我不知道如何使用 git 命令删除它,所以我只是在 .git 文件夹中删除它:

$ cd .git/refs/head $ ls *r -r $ rm "*r"



这个解决方案之所以安全,是因为它是列出的唯一以“r”结尾的分支,但它确实解决了问题......


0
投票
如果您使用的是 IntelliJ 等 IDE,则可以从 IDE 中删除分支。只需单击分支列表,将鼠标悬停在您想要的分支上,然后重命名或删除它。

© www.soinside.com 2019 - 2024. All rights reserved.