删除名称不合适的git分支

Fel*_*lix 50 git git-branch

我知道这不是一个严格的编程问题,但它与git有关.我不小心在git中创建了一个分支--track(我在合并远程分支时得到了错误的选项顺序)

常规命令不起作用:

git branch -D "--track"  
Run Code Online (Sandbox Code Playgroud)

我试图用引号和反斜线逃脱,但是都不起作用.

有任何想法吗?

Von*_*onC 92

你试过了吗

git branch -D -- --track
Run Code Online (Sandbox Code Playgroud)

?" --"通常是"以下内容不是一个选项,无论其名称"的约定


从" Unix的编程艺术 "," 命令行选项 "部分:

将双连字符识别为停止选项解释的信号并按字面意思处理所有后续参数也是常规的.

您将在其他(不需要与Unix相关的)CLI(命令行界面)中找到该约定,如cleartool:

如果nonoption参数以hyphen()字符开头,则可能需要在其前面加上双连字符参数,以防止它被解释为选项:

cleartool rmtype -lbtype -- -temporary_label- 
Run Code Online (Sandbox Code Playgroud)

P18(具有宏处理能力和国际化的特殊支持快速灵活的文件预处理)提到,也并给出了该公约背后的总体思路的一个很好的说明:

传递给命令的所有选项参数都以单个连字符开头.
所有选项参数(如果有)必须在所有非选项参数之前.
可以使用双连字符来表示选项参数的结尾,如果非选项参数以连字符开头,这将非常有用.使用双连字符终止选项参数列表适用于所有命令,甚至是那些不带任何选项参数的命令.

用ruby编写的OptionParser工具也非常清楚地说明了这一点:*

选项解析终止

惯例是双连字符是一个停止选项解释的信号,并且在字面上读取命令行上的其余语句.所以,命令如:

 app -- -x -y -z
Run Code Online (Sandbox Code Playgroud)

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

 #args = ["-x", "-y", "-z"]
Run Code Online (Sandbox Code Playgroud)

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

Gnu样式命令行选项提供对选项词(或关键字)的支持,但仍保持与Unix样式选项的兼容性.
此样式中的选项有时称为long_options和Unix样式选项short_options.
通过在long_options之前加上两个破折号来保持兼容性

类似于Unix风格的双连字符' --',Gnu样式有一个三连字符' ---'表示停止选项解析并将剩余的文本视为参数(即,从命令行逐字读取)

所以...如果' --'还不够(应该使用Git命令),试试' ---'

  • 是 - 仅限git或大多数linux命令行工具的约定? (2认同)
  • 好的,找到了示例和参考:答案已更新 (2认同)

Jam*_*acs 5

我正在使用 msysgit 1.7.0.2 并且建议的解决方案不起作用:

git Branch -D -- --track # 不起作用

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

rm .git/refs/heads/--track