【问题标题】:Deleting a badly named git branch删除命名错误的 git 分支
【发布时间】:2010-11-14 14:22:06
【问题描述】:

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

常规命令不起作用:

git branch -D "--track"  

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

有什么想法吗?

【问题讨论】:

  • 我想知道您最初是如何创建该分支的。它看起来不像你做了“git branch -- --track”。还是你?
  • 这是有问题的行,我试图跟踪一个远程分支。 git branch -b --track origin/dev
  • 引号或斜杠不起作用,因为它们已被您的 shell 较早解释,而问题在于 Git 及其参数解析。
  • 转义/引用无济于事,因为问题不在于 shell 如何解释命令,而在于 git 如何解释它。所有转义都是在将参数传递给 git 之前完成的。

标签: git git-branch


【解决方案1】:

你试过了吗

git branch -D -- --track

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


来自“The Art of Unix Programming”,部分“Command-Line Options”:

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

您会在其他(非必需的 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命令),试试'---'

【讨论】:

  • 是——仅适用于 git 还是适用于大多数 linux 命令行工具?
  • @Zelux:好问题。我只是在检查那个。暂时未确认。
  • 也许不是全部,但肯定适用于 rm 等基础知识。这是摆脱名为“-rf”的文件的一种方式......
  • @quark,摆脱“-rf”的另一种方法是“rm ./-rf”。 :)
  • 使用 msysgit,这在 Powershell 中不起作用,但在 cmd 窗口中起作用。
【解决方案2】:
git branch -D -- --track

【讨论】:

    【解决方案3】:

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

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

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

    rm .git/refs/heads/--track

    【讨论】:

      【解决方案4】:

      双连字符不适用于远程分支名称包含双引号和 & 符号的我。但是,包装名称引号并转义包含的引号就可以了:

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

      和本地:

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-08-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多