2015-05-05 3 views
3

я не знаю, как это случилось, но как-то наш удаленный репо имеет филиалы и теги, названные так, показывая, когда я бегу git ls-remote команду:Как удалить поврежденные удаленные ветви/теги в git?

refs/heads/abc^{} 
refs/tags/def^{} 

И я не могу удалить их обычным способом:

git push origin :refs/heads/abc^{} 
fatal: remote part of refspec is not a valid name in :refs/heads/abc^{} 

Как удалить эти поврежденные удаленные ветви?

+0

Что хранилище вы используете? В GitHub было бы тривиально удалить эту ветку на удаленной (и, скорее всего, на BitBucket). –

+0

@Tim Gitlab. Я не вижу интерфейса для этого. – Magnus

+0

Вы пробовали просто «git push origin: abc^{}'? Какую услугу вы используете? – isherwood

ответ

2

Это не филиал, это результат плохой отрасли:

server$ echo echo 2e79bc84c11eda5d73add5a9dfc6bf03c50c432d > refs/heads/oogly 

В этом случае SHA-1 я выбрал то, что аннотированный тег. Вы не можете получить «git branch» или «git checkout», чтобы указать на тег, они всегда очищаются от фиксации, но вы можете получить инструмент, не поддерживающий git (например, echo), чтобы сделать разбитую ветвь ,

Затем на клиенте:

client$ git ls-remote 
[snip] 
d1574b852963482d4b482992ad6343691082412f refs/heads/master 
2e79bc84c11eda5d73add5a9dfc6bf03c50c432d refs/heads/oogly 
676699a0e0cdfd97521f3524c763222f1c30a094 refs/heads/oogly^{} 
[snip] 

Удаление фактической ветви (oogly в этом случае, abc в вашем) на сервере будет сделать «лущеного тег» уйти на клиенте. Обратите внимание: если вы хотите сохранить тег, вы должны указать на него тег, если его уже нет.

Как это создавалось на сервере в первую очередь, я понятия не имею.

Обратите внимание, что это абсолютно нормально для (аннотированных) тегов: сервер предоставляет как тег, так и его SHA-1 и SHA-1 базового объекта, на который он указывает. Синтаксис описан в gitrevisions:

<rev>^{}, e.g. v0.99.8^{} 
     A suffix^followed by an empty brace pair means the object could 
     be a tag, and dereference the tag recursively until a non-tag 
     object is found. 
+0

Интересно! Ваша техника работала ... Я создал временный тег для сохранения местоположения, затем удалил базовую ветку refs/heads/abc, которая, как вы полагали, имела корреляцию 1: 1 с плохими ветвями/тегами, а затем, наконец, только что воссоздала тег /филиал. Это сработало! – Magnus

+0

Извините, мне нужно немного отступить: 1) некоторые из этих поврежденных ветвей уже были тегами, и 2) удаление основного тега решает проблему, но затем подталкивание вновь созданного тега замены снова создает проблему! – Magnus

+0

Это абсолютно нормально для тегов! См. Править. – torek

Смежные вопросы