我知道这不是一个严格的编程问题,但它与git有关。我不小心在git中创建了一个名为--track
的分支(合并远程分支时我的选项顺序错误了)
常规命令不起作用:
git branch -D "--track"
我试图用引号和反斜杠逃避,但是都不起作用。
有什么想法吗?
答案 0 :(得分:87)
你试过吗
git branch -D -- --track
? “--
”通常是“以下内容不是一个选项,无论其名称是什么”的约定
从“The Art of Unix Programming”,“Command-Line Options”部分:
通常将双连字符识别为停止选项解释的信号并按字面意思处理所有后续参数。
您会在cleartool之类的其他(不需要与Unix相关)CLI(命令行界面)中找到该约定:
如果 nonoption参数以连字符(
–
)字符开头,则可能需要在其前面加上双连字符参数,以防止将其解释为选项:
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命令),请尝试'---
'
答案 1 :(得分:7)
git branch -D -- --track
答案 2 :(得分:4)
我正在使用msysgit 1.7.0.2,建议的解决方案不起作用:
git branch -D - --track#不起作用
没有报告错误,但分支仍然存在。我最终通过以下方式强行删除分支:
rm .git / refs / heads / - track
答案 3 :(得分:1)
对于我来说,双连字符对我来说不适用于包含双引号和&符号的分支名称。然而,包装名称引号并转义包含的引号完成了这项工作:
git push origin --delete "123-my-branch-&-some\"quoted-text\""
和本地:
git branch -D "123-my-branch-&-some\"quoted-text\""
答案 4 :(得分:0)
我有一个类似的问题,我不小心结束了" -r"科。我无法弄清楚如何使用git命令删除它,所以我只是将其删除在.git文件夹中:
$ cd .git/refs/head
$ ls *r
-r
$ rm "*r"
这个解决方案只是安全的,因为它是列出的唯一分支结束于" r"但它确实解决了这个问题...
答案 5 :(得分:0)
您可以使用软件mamed sourcetree,它可以删除您喜欢的任何分支。