是否有 git 命令可以解决错误:找不到远程分支'refs/heads/foo/bar'?



在我的情况下,我正在跟踪一个其他人合并并删除的远程修补程序分支。

我已经删除了我的本地分支,但当我提取时,我仍然会收到上面的错误,因为我的git配置文件中有以下行:

[remote "origin"]
...
    fetch = +refs/heads/foo/bar:refs/remotes/origin/foo/bar
    push = +refs/heads/foo/bar:refs/for/foo/bar
...

这个错误可以通过从文件中删除这些行来解决,但有没有办法从命令行中做到这一点?

有,但如果你只想去掉一行匹配的行,通常比手动编辑要困难得多。

修改git配置文件的命令是git config。它有--unset--unset-all--remove-section选项,用于删除某个特定节或键中的一个、所有匹配项或所有条目。

在这种情况下,部分是remote.origin(因为它在文件中的[remote "origin"]中),密钥是remote.origin.fetch。在这种情况下,您不希望删除整个部分,这样就可以保留--unset--unset-all

可以有多条fetch线,也可以有多个push线。换句话说,一个键可以有多个副本,具有不同的值。

如果只有一个remote.origin.fetch行,并且您想删除它,您可以简单地:

git config --unset remote.origin.fetch

如果您在具有多个提取行的存储库上尝试此操作,则会得到:

warning: remote.origin.fetch has multiple values

在这种情况下,您需要更复杂的变体,--unset-all(移除所有remote.origin.fetch密钥)或--unset key value_regex(移除那些值与value_regex匹配的密钥)。

由于您可能只想取消设置一个匹配的行,因此必须想出一个正则表达式来匹配这一行,并且只匹配那一行。阅读git config文档,找到合适的正则表达式;请注意,由于这些是POSIX"扩展"RE,一个裸露的+字符意味着"前一个字符中的一个或多个",因此+refs/...不起作用,因为缺少"前一字符"部分。(根据文档,这些也显然是未锚定的。)在这种情况下,:refs/remotes/origin/foo/bar可能就足够了,但你可能会更喜欢。

要删除push条目,请重复以上步骤,但以remote.origin.push为关键字。

(或者只需使用您喜欢的编辑器并以交互方式删除正确的行,这要容易得多,尽管不太适合脚本…)

相关内容

最新更新