代码之家  ›  专栏  ›  技术社区  ›  Felix

删除名称不正确的Git分支

  •  46
  • Felix  · 技术社区  · 15 年前

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

    常规命令不起作用:

    git branch -D "--track"  
    

    我试着用引号和反斜杠进行转义,但都不起作用。

    有什么想法吗?

    6 回复  |  直到 8 年前
        1
  •  85
  •   GermainZ    10 年前

    你试过吗?

    git branch -D -- --track
    

    ?“ -- 通常是“以下内容不是选项,无论其名称如何”的约定


    从“ The Art of Unix Programming “剖面” Command-Line Options “:

    通常情况下,将双连字符识别为停止选项解释的信号,并逐字处理所有以下参数。

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

    如果A 非选项参数 以连字符开头( – )字符,您可能需要在其前面加上双连字符参数,以防止将其解释为选项:

    cleartool rmtype -lbtype -- -temporary_label- 
    

    这个 P18 (一个具有宏处理能力和对国际化的特殊支持的快速、灵活的文件预处理器)也提到了这一点,并对该惯例背后的一般思想进行了很好的描述:

    传递给命令的所有选项参数都以一个连字符开头。
    所有选项参数(如果有)必须位于所有非选项参数之前。
    选项参数的结尾可以使用 双连字符 ,这在非选项参数以连字符开头时很有用。使用双连字符终止选项参数列表对所有命令都有效,即使那些不接受任何选项参数的命令也是如此。

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

    选项解析终止

    通常情况下,双连字符是停止选项解释和从字面上读取命令行上剩余语句的信号。因此,命令如下:

     app -- -x -y -z
    

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

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

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

    GNU样式的命令行选项提供了对选项词(或关键字)的支持,但仍然保持与UNIX样式选项的兼容性。
    这种样式的选项有时被称为 long_options 以及Unix样式选项 short_options .
    通过在长\选项前面加两个破折号来保持兼容性。

    类似于Unix风格的双连字符 —— _,GNU样式有三个连字符_ --- _

    所以…如果 —— '不够(应该使用git命令),请尝试' ---

        2
  •  7
  •   Fake Code Monkey Rashid    15 年前
    git branch -D -- --track
    
        3
  •  4
  •   James Kovacs    15 年前

    我使用的是msysgit 1.7.0.2,建议的解决方案不起作用:

    Git分支-d---track不工作

    未报告错误,但分支仍保留。最后我通过以下方式强行移除了分支:

    rm.git/refs/heads/——轨道

        4
  •  1
  •   igniteflow    11 年前

    在远程服务器上,双连字符对我来说不起作用,因为它的分支名称包含双引号和符号。但是,包装名称引号并转义包含的引号完成了以下工作:

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

    和本地:

    git branch -D "123-my-branch-&-some\"quoted-text\""
    
        5
  •  0
  •   Greg Malcolm    8 年前

    我有一个类似的问题,我意外地得到了一个“-r”分支。我不知道如何使用git命令删除它,所以我只是在.git文件夹中删除它:

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

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

        6
  •  0
  •   evan    8 年前

    您可以使用软件mamed sourcetree,它可以删除您喜欢的任何分支。