Come si rimuove un riferimento ramo remoto non valida dal Git?
-
21-08-2019 - |
Domanda
Nel mio repo corrente ho il seguente output:
$ git branch -a
* master
remotes/origin/master
remotes/public/master
voglio cancellare remotes/public/master
dalla lista ramo:
$ git branch -d remotes/public/master
error: branch 'remotes/public/master' not found.
Inoltre, l'uscita di git remote
è strano, dal momento che non elenca public
:
$ git remote show
origin
Come faccio a eliminare 'i telecomandi / public / master' dalla lista ramo?
Update, provato il git push
comando:
$ git push public :master
fatal: 'public' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
Soluzione
Si potrebbe essere bisogno di una pulizia
git gc --prune=now
o si potrebbe essere bisogno di una prugna
git remote prune public
prugna
Elimina tutti i rami di tracciamento stantii in
. Questi rami stantio sono già stati rimossi dal repository remoto fa riferimento , ma sono ancora disponibili localmente in "telecomandi / ". Con l'opzione --dry-run, riportano quello che sarà potate i rami, ma non fanno in realtà li potano.
Tuttavia, sembra questi dovrebbero sono stati ripuliti in precedenza con
git remote rm public
rm
Rimuovere il nome remoto
. Tutto il monitoraggio a distanza rami e le impostazioni di configurazione per il telecomando vengono rimossi.
Quindi potrebbe essere voi a mano modificato il file di configurazione e questo non si è verificato, o se si hanno problemi di privilegio.
Forse correre ancora una volta che e vedere cosa succede.
Consigli di contesto
Se si dà un'occhiata alla registri di revisione , noterete ho suggerito più tecniche "corretti", che per qualsiasi motivo non ha voglia di lavorare sul loro repository.
ho sospettato il PO aveva fatto qualcosa che ha lasciato il loro albero in uno stato incoerente che ha causato a comportarsi un po 'strano, e git gc
è stato richiesto per sistemare dietro cruft sinistra.
In genere git branch -rd origin/badbranch
è sufficiente per bombardare un ramo di monitoraggio locale o git push origin :badbranch
per bombardare una filiale remota, e di solito volete non necessario chiamare <=>
Altri suggerimenti
Tutto quello che dovete fare è
git fetch -p
Sarà rimuovere tutte le sedi locali che vengono cancellati da remoto.
Se siete su git 1.8.5+ è possibile impostare automaticamente
git config fetch.prune true
o
git config --global fetch.prune true
git push public :master
Ciò elimina il ramo remoto denominato master
come Kent Fredric ha sottolineato.
Per elencare remote-tracking rami:
git branch -r
Per eliminare un ramo a distanza-tracking:
git branch -rd public/master
Tutto quello che dovete fare è
$ git branch -rd origin/whatever
E 'così semplice. Non c'è ragione di chiamare un gc qui.
git gc --prune=now
non è quello che volete.
git remote prune public
o git remote prune origin
# se questo è il telecomando della sorgente
è quello che vuoi
La risposta accettata non ha funzionato per me quando l'arbitro era pieno. Questo fa però:
$ git remote add public http://anything.com/bogus.git
$ git remote rm public
Nel mio caso stavo cercando di eliminare le voci che sono state salvate in .git/packed-refs
. È possibile modificare questo file di testo ed eliminare le voci da essa che git br -D
non sa come toccare (Almeno in ver 1.7.9.5).
Ho trovato qui questa soluzione: https://stackoverflow.com/a/11050880/1695680
git push origin --delete <branch name>
di riferimento da: http://www.gitguys.com/ argomenti / aggiungendo-e-remoti rami-rimozione-/
Ho avuto un problema simile. Nessuna delle risposte ha aiutato. Nel mio caso ho avuto due repository remoti rimossi mostrando in modo permanente.
La mia ultima idea era quella di eliminare tutti i riferimenti ad esso a mano.
Diciamo che il repository è chiamato “Repo”. Ho fatto:
find .git -name Repo
e cancellati i file e le directory corrispondenti
grep Repo -r .git
Questo trovato alcuni file di testo in cui ho rimosso le linee corrispondenti. Ora, tutto sembra andare bene.
Di solito è consigliabile lasciare questo lavoro a git.
Non sapevo su git branch -rd
, in modo che il modo in cui ho risolto problemi come questo per me è quello di trattare il mio repo come un pronti contro termine a distanza e fare un cancellare a distanza. git push . :refs/remotes/public/master
. Se gli altri modi non funzionano e si ha qualche riferimento strano che si vuole sbarazzarsi di, in questo modo crudo è infallibile. Ti dà l'esatta precisione per rimuovere (o crearne!) Qualsiasi tipo di riferimento.
Solo un po 'correlate, ma comunque potrebbe essere utile nella stessa situazione, come abbiamo avuto - usiamo una condivisione di file di rete per il nostro repository remoto. La settimana scorsa le cose stavano lavorando, questa settimana siamo stati sempre l'errore "origine remota non pubblicizzare Ref per arbitri filiali / teste / master. Questo Rif potrebbe non esistere nel remoto o può essere nascosto da impostazioni di autorizzazione"
Ma ci abbiamo creduto nulla era stato fatto per le cose corrotti. Il NFS fa istantanee così ho rivisto ogni "versione precedente" e visto che tre giorni fa, la dimensione in MB del repository era andato da 282MB a 33MB, e circa 1.403 nuovi file e 300 cartelle ora esistito. Ho chiesto ai miei collaboratori e aveva tentato di fare una spinta quel giorno -. Poi annullato
ho usato il "Restore" funzionalità NFS per riportarla a poco prima di tale data e ora everythings lavorare di nuovo bene. Ho provato la prugna in precedenza, non ha ancora sembrano aiutare. Forse le ripuliture più severe avrebbero funzionato.
Spero che questo potrebbe aiutare qualcun altro un giorno!
Jay