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

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

Обычная команда не работает:

git branch -D "--track"  

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

Есть идеи?

7 ответов

Решение

Ты пробовал

git branch -D -- --track

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


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

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

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

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

cleartool rmtype -lbtype -- -temporary_label- 

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

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

Инструмент OptionParser, написанный на ruby, также ясно объясняет это:*

Прекращение синтаксического анализа

Принято считать, что двойной дефис является сигналом для прекращения интерпретации параметров и буквального чтения оставшихся операторов в командной строке. Итак, такая команда как:

 app -- -x -y -z

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

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

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

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

Аналогично двойному дефису в стиле Unix--"Стиль Гну имеет тройной дефис"---'сигнализировать о том, что анализ опции должен быть остановлен, и обрабатывать оставшийся текст как аргументы (то есть читать буквально из командной строки)

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

git branch -D -- --track

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

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

Об ошибках не сообщается, но ветка все еще остается. В итоге я принудительно удалил ветку через:

RM. GIT / Refs/ Heads/- трек

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

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

и локально:

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

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

Если вы используете IDE, например IntelliJ, вы можете удалить ветку из IDE. Просто нажмите на список веток, наведите указатель мыши на нужную ветку, а затем переименуйте или удалите ее.

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

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

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

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