2011-02-03 18 views
18

Non mi chiedono come, ma sono riuscito ad ottenere accidentalmente le seguenti filiali remote in un repository git:Come rimuovere remota origine/refs/teste/master

$ git branch -r 
    origin/HEAD -> origin/master 
    origin/master 
    origin/refs/heads/master 

Tutti sono che puntano allo stesso commettere. Come posso rimuovere la voce inutile per origin/refs/heads/master?

ho cercato di fare il seguente

$ git push origin :refs/heads/master 
error: dst refspec refs/heads/master matches more than one. 

Ma come indicato, questo dà un errore.

risposta

15

La soluzione era quella di eliminare il ramo refs/heads/refs/heads/master

git push origin :refs/heads/refs/heads/master 
39

Questo non è in realtà un ramo sul telecomando - è solo un ref locale che sostiene di rappresentare qualcosa sul telecomando, proprio come origine/master rappresenta il ramo principale sul telecomando. Il nome completo del ref è refs/remotes/origin/refs/heads/master. Tutto quello che dovete fare per eliminarlo è:

git branch -r -d origin/refs/heads/master 

E 'vagamente possibile che lei è riuscito a spingere questo pure (ma avresti dovuto provare più duramente per farlo). Se così fosse, avrei semplicemente messa in vendita gli arbitri di origine:

git ls-remote origin 

e poi, se c'è qualcosa di stupido lì, utilizzando git push origin :<refname> per sbarazzarsi di esso.

P.S. Se questa non lo fa per voi, si sta andando a voler utilizzare git for-each-ref per vedere tutti i tuoi arbitri, e, eventualmente, git ls-remote origin per vedere tutte quelle remote, e rintracciare esattamente cui le cose non appartengono, con i loro refnames completamente qualificati.

+0

Hmm, era origine/ref/heads/refs/heads/master e l'ho cancellato con 'git push origin: refs/heads/refs/heads/master' –

+0

@Peter: beh, questo è quello che ho indovinato il primo paragrafo. Sono impressionato dal fatto che sei riuscito a metterlo nel telecomando; mi ci è voluto un po 'per capire come farlo da solo! Sono contento che tu l'abbia risolto. – Cascabel

4

E '

git branch -r -d origin/ref/heads/master 

invece di

git branch -r -d origin/refs/heads/master 

nella parte di codice per eliminare ramo. C'è differenza nella parola ref nel codice.