我知道这严格来说不是一个编程问题,但它与 git 有关。我不小心在 git 中创建了一个名为
--track
的分支(合并远程分支时选项顺序错误)
常规命令不起作用:
git branch -D "--track"
我尝试用引号和反斜杠转义,但是都不起作用。
有什么想法吗?
你尝试过吗
git branch -D -- --track
? “
--
”通常是“无论其名称如何,接下来的内容都不是一个选项”的约定
来自“Unix 编程的艺术”,“命令行选项”部分:
按照惯例,将双连字符识别为停止选项解释并按字面意思处理所有后续参数的信号。
您会在其他(不一定与 Unix 相关)CLI(命令行界面)中找到该约定,例如 cleartool:
如果非选项参数以连字符 (
) 字符开头,您可能需要在其前面添加双连字符参数,以防止其被解释为选项:–
cleartool rmtype -lbtype -- -temporary_label-
P18(一种快速灵活的文件预处理器,具有宏处理功能和对国际化的特殊支持)也提到了这一点,并很好地描述了该约定背后的总体思想:
传递给命令的所有选项参数均以单个连字符开头。用 ruby 编写的 选项解析终止所有选项参数(如果有)必须位于所有非选项参数之前。
选项参数的结尾可以使用
双连字符来表示,如果非选项参数以连字符开头,这非常有用。用双连字符终止选项参数列表适用于所有命令,即使是那些不带任何选项参数的命令。
按照惯例,双连字符是停止选项解释并按字面意思读取命令行上剩余语句的信号。因此,命令如下:
app -- -x -y -z
不会“看到”三个模式标志。相反,它们将被视为应用程序的参数:
#args = ["-x", "-y", "-z"]
Gnu 风格命令行选项提供对选项字(或关键字)的支持,但仍保持与 Unix 风格选项的兼容性。这种风格的选项有时称为
,Unix 风格的选项称为long_options
short_options
。 通过在 long_options 前面加上两个破折号来保持兼容性
与 Unix 风格的双连字符“所以...如果 '
--
”类似,Gnu 风格有一个三连字符“---
”来表示选项解析停止并将剩余文本视为参数(即从字面上读取)命令行)
--
' 还不够(应该使用 Git 命令),请尝试 '
---
'
git branch -D -- --track
git 分支 -D -- --track # 不起作用
没有报错,但是分支依然存在。我最终通过以下方式强行删除了分支:
rm .git/refs/heads/--track
git push origin --delete "123-my-branch-&-some\"quoted-text\""
本地:
git branch -D "123-my-branch-&-some\"quoted-text\""
$ cd .git/refs/head
$ ls *r
-r
$ rm "*r"