在我的情况下,我正在跟踪一个其他人合并并删除的远程修补程序分支。
我已经删除了我的本地分支,但当我提取时,我仍然会收到上面的错误,因为我的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
为关键字。
(或者只需使用您喜欢的编辑器并以交互方式删除正确的行,这要容易得多,尽管不太适合脚本…)