4

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

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

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

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

4

1 回答 1

4

有,但通常比手动编辑要困难得多,如果您只想删除一个匹配的行。

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

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

warning: remote.origin.fetch has multiple values

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

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

要删除该push条目,请重复上述步骤,但使用remote.origin.pushas 键。

(或者只是使用您最喜欢的编辑器并交互删除正确的行,这会容易得多,尽管不太适合脚本......)

于 2014-09-03T17:35:09.600 回答