在我的情况下,我正在跟踪其他人合并和删除的远程修补程序分支。
我已经删除了我的本地分支但是当我拉动时仍然出现上述错误,因为我的git配置文件中有以下行:
[remote "origin"]
...
fetch = +refs/heads/foo/bar:refs/remotes/origin/foo/bar
push = +refs/heads/foo/bar:refs/for/foo/bar
...
可以通过从文件中删除这些行来解决错误,但有没有办法从命令行执行此操作?
答案 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
为键。
(或者只是使用你最喜欢的编辑器并以交互方式删除正确的行,这很容易,虽然不太适合脚本......)