是否有一个可以解决错误的git命令:remote branch' refs / heads / foo / bar'未找到?

时间:2014-09-03 15:11:00

标签: git fetch pull refspec

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

我已经删除了我的本地分支但是当我拉动时仍然出现上述错误,因为我的git配置文件中有以下行:

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

可以通过从文件中删除这些行来解决错误,但有没有办法从命令行执行此操作?

1 个答案:

答案 0 :(得分:1)

有,但如果你想摆脱一条匹配的线,它通常比手动编辑困难得多。

修改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

你会发现没有任何东西被删除(至少这是我用git 2.1.0得到的)。在这种情况下,您需要更复杂的变体,--unset-all(删除所有 remote.origin.fetch键)或--unset key value_regex(删除值与 value_regex 的)。

由于您可能只想取消设置一条匹配的行,因此您必须提供一个匹配该行的正则表达式,并且只能找到一行。阅读the git config documentation以提出合适的正则表达式;请注意,由于这些是POSIX“扩展”RE,因此裸+字符表示“前一个字符中的一个或多个”,因此+refs/...不起作用,因为缺少“前一个字符”部分。 (根据文档,这些也显然没有锚定。)在这种情况下,:refs/remotes/origin/foo/bar可能就足够了,但你可能会变得更加漂亮。

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

(或者只是使用你最喜欢的编辑器并以交互方式删除正确的行,这很容易,虽然不太适合脚本......)