Существует ли команда 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
...

Ошибка может быть устранена путем удаления этих строк из файла, но есть ли способ сделать это из командной строки?

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).

Поскольку вы, вероятно, хотите сбросить только одну совпадающую строку, вы должны создать регулярное выражение, соответствующее этой одной строке и только этой одной строке. Прочитайте через git config документация для составления подходящего регулярного выражения; обратите внимание, что, поскольку это POSIX "расширенные" RE, + символ означает "один или несколько из предыдущего символа", поэтому +refs/... не работает, так как часть "предыдущий персонаж" отсутствует. (Они также явно не закреплены на основе документации.) В этом случае :refs/remotes/origin/foo/bar Вероятно, достаточно, но вы могли бы полюбить.

Удалить push повторите действия, описанные выше, но с remote.origin.push как ключ.

(Или просто используйте ваш любимый редактор и в интерактивном режиме удалите нужные строки, что намного проще, хотя и не очень подходит для сценария...)

Другие вопросы по тегам