【问题标题】:Can't checkout git branch started with hyphen (-)无法签出以连字符 (-) 开头的 git 分支
【发布时间】:2013-12-04 12:06:34
【问题描述】:

我已经克隆了一个 git 存储库。
此存储库有一个远程分支,类似于 -feature-abc
当我输入git checkout -feature-abc 时,我得到:

error: unknown switch `e'

知道如何签出这个分支吗?

【问题讨论】:

  • 尝试在名称周围使用引号 (")。
  • @PMF 我尝试使用单引号和双引号,但没有运气。同样的错误。
  • @PMF 不同意:git 可执行文件会在 argv 中看到相同的字符串。
  • 嗯,对。不是一个好主意:-(

标签: git


【解决方案1】:

尝试使用以下语法:

git checkout -- -feature-abc

双连字符语法应该有助于 git 将命令选项与实际的分支名称参数分开,正如我之前在“Deleting a badly named git branch”中解释的那样。


如果这不起作用,您可以按照“How do I rename a local Git branch?”中建议的方法进行操作

进入工作副本的 .git/refs/heads,找到文件名“-dumb-name”,获取分支的哈希值。然后这将检查它,使用合理的名称创建一个新分支,然后删除旧分支。

  • 进入工作副本的.git/refs/heads
  • 找到名为“-feature-abc”的文件,
  • 获取分支的哈希(cat 文件)。
  • 然后检查一下,创建一个名称合理的新分支,然后删除旧分支。
git checkout {hash}
git checkout -b brilliant-name
git branch -d -- -dumb-name

【讨论】:

  • 在结帐时使用“--”的解决方案 1 不起作用。它给出错误“错误:pathspec '-feature-tipslist' 与 git 已知的任何文件不匹配。”
  • 解决方案 2 也不起作用。 '.git/refs/heads' 中没有文件名'-feature-abc',因为我还不能签出那个分支。
【解决方案2】:

最后,我能够根据 VonC 的Answer 让事情正常进行。

解决方案 1:

git checkout -b feature-abc origin/-feature-abc

解决方案 2:

  • 进入工作副本的.git/refs/remotes/origin
  • 找到名为“-feature-abc”的文件,
  • 获取分支的hash(cat文件),
  • 然后检查一下,创建一个名称合理的新分支,
  • 使新分支跟踪远程分支。
git checkout {hash}
git checkout -b feature-abc
git branch --set-upstream-to=origin/-feature-abc feature-abc

Make an existing Git branch track a remote branch?

【讨论】:

  • 你没有提到这个分支是一个远程分支。我的解决方案可以使用origin/-feature-abc 而不是-feature-abc。但仍然 +1。
猜你喜欢
  • 2020-02-28
  • 2015-08-09
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 2017-07-23
  • 1970-01-01
相关资源
最近更新 更多