Удаление плохо названной ветки git

Я знаю, что это не совсем вопрос программирования, но он связан с git. Я случайно создал ветвь в git, называемую --track (у меня был неправильный порядок вариантов при объединении удаленной ветки)

Регулярная команда не работает:

git branch -D "--track"  

Я попытался сбежать с кавычками и обратными слэшами, однако не работает.

Любые идеи?

Ответ 1

Вы пробовали

git branch -D -- --track

? "--" обычно является соглашением для "то, что следует, это не вариант, независимо от его имени"


От " Искусство программирования Unix", раздел " Command- Параметры линии":

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

Вы найдете это соглашение в другом (необязательном Unix-связанном) CLI (интерфейс командной строки), например cleartool:

Если аргумент nonoption начинается с символа дефиса (), вам может потребоваться предшествовать ему аргумент с двумя аргументами, чтобы он не интерпретировался как опция:

cleartool rmtype -lbtype -- -temporary_label- 

P18 (быстрый и гибкий препроцессор файлов с возможностями обработки макросов и специальная поддержка интернационализации) упоминает это также и дает хороший описание общей идеи этого соглашения:

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

Инструмент OptionParser, написанный на рубине, также совершенно ясно показывает: *

Окончание сеанса опций

Согласие на то, что двойной дефис является сигналом, чтобы остановить опцию интерпретации и прочитать остальные инструкции в командной строке буквально. Итак, команда, например:

 app -- -x -y -z

не будет видеть три флага режима. Вместо этого они будут рассматриваться как аргументы для приложения:

 #args = ["-x", "-y", "-z"]

Примечание: иногда требуется три тире, а не два, особенно если CLI строго соответствует стилям опций Gnu:

Параметры командной строки стиля Gnu обеспечивают поддержку слов параметров (или ключевых слов), но при этом сохраняют совместимость с параметрами стиля Unix.
Параметры в этом стиле иногда называются long_options, а параметры стиля Unix - short_options.
Совместимость сохраняется, предшествуя long_options с двумя штрихами

Как и стиль Unix с двойным дефем --, стиль Gnu имеет трижды дефис ---, чтобы сигнализировать о том, что синтаксический разбор параметров остановлен, и обрабатывать оставшийся текст как аргументы (то есть читать буквально из команды строка)

Итак... если '--' недостаточно (это должно быть с командами Git), попробуйте '---'

Ответ 2

git branch -D -- --track

Ответ 3

Я использую msysgit 1.7.0.2, и предлагаемое решение не работает:

git branch -D - --track # не работает

Сообщается об ошибке, но ветка остается. Я закончил тем, что удалил ветку с помощью:

rm.git/refs/heads/- track

Ответ 4

Двойной дефис не работал у меня на удаленном компьютере с именем ветки, содержащим двойные кавычки и амперсанды. Однако обертывание котировок имен и экранирование содержащихся в них кавычек выполняло задание:

git push origin --delete "123-my-branch-&-some\"quoted-text\""

и локально:

git branch -D "123-my-branch-&-some\"quoted-text\""

Ответ 5

У меня была аналогичная проблема, когда я случайно попал в ветвь "-r". Я не мог понять, как удалить его с помощью команд git, поэтому я просто удаляю его в папку .git:

$ cd .git/refs/head $ ls *r -r $ rm "*r"

Это решение было только безопасным, потому что это была единственная ветвь, которая закончилась в "r", но она решила проблему...

Ответ 6

вы можете использовать программное обеспечение mamed sourcetree, которое может удалить любую ветку, которая вам нравится.