Существует ли команда 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
как ключ.
(Или просто используйте ваш любимый редактор и в интерактивном режиме удалите нужные строки, что намного проще, хотя и не очень подходит для сценария...)