L'eliminazione del file dal repository Git non è riuscita, impossibile creare un nuovo backup


116

Ho provato a rimuovere un file dal mio repository remoto eseguendo:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

Ma Git se ne lamenta

Impossibile creare un nuovo backup. Esiste già un backup precedente in refs / original /
Forza la sovrascrittura del backup con -f
rm: impossibile rimuovere /.git-rewrite/backup-refs: Autorizzazione negata
rm: impossibile rimuovere la directory /.git-rewrite: Directory non vuota

Questo è stato dopo che ho già cancellato la directory .git-rewrite su Windows.

Come posso rimuovere quel file? È un file da 29 Mb che si trova nel mio repository, quindi ho bisogno di rimuovere il file.

Ho provato a eliminare il commit in git rebase -i, ma a quanto pare poiché il commit ha toccato molti file diversi, Git si lamenta di conflitti e ho interrotto per sicurezza.


1
Per i motori di ricerca: questo può essere applicato anche quando il messaggio di errore è .git-rewrite already exists, please remove it.
Drew Noakes

Risposte:


219

Hai già eseguito un'operazione di diramazione del filtro. Dopo il ramo del filtro, Git mantiene i riferimenti ai vecchi commit in giro, nel caso qualcosa vada storto.

Puoi trovarli in .git/refs/original/…. Elimina quella directory e tutti i file al suo interno o usa il -fflag per forzare Git a eliminare i vecchi riferimenti.

git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

10
Finalmente ha funzionato, grazie! Ho provato il flag -f, ma il problema era che lo stavo mettendo alla fine del comando, ad es. TESTA -f. Vedere il tuo comando mi ha fatto provare a mettere la bandiera all'inizio, e ha funzionato! = D
Cardin

12
le opzioni flag ( -f) vanno prima di refs ( HEAD). gli arbitri vanno per ultimi
maglia

Continuo a ricevere lo stesso errore dopo aver aggiunto -f E aver eliminato la directory. Qualche idea?
Yaron

1
@knittl, non mi riferivo a git add. Ho ricevuto lo stesso errore del poster originale anche dopo aver eliminato la .git/refs/original/cartella e utilizzato il -fflag nel git filter-branchcomando. La soluzione, nel mio caso, era eliminare il .git/packed-refsfile.
Yaron

1
@knittl, ho trovato come risolverlo, ma non ho trovato quale fosse il problema. Fondamentalmente, ho aggiunto --ignore-unmatchal comando git rmed è andato tutto liscio!
Gabrielius

21

Usa questo comando per rimuovere il backup originale:

git update-ref -d refs/original/refs/heads/master

Ecco la sintesi che ho usato per filtrare il mio repository Git: https://gist.github.com/k06a/25a0214c98bc19fd6817


Questa è la soluzione giusta per rimuovere il backup! L'eliminazione .git/refs/original/non risolve il problema.
Erik Koopmans

Assicurati di cambiare "master" nel ramo che stai tentando di aggiustare .. nel mio caso "sviluppo"
Damian Green

git show-ref | awk '/ refs.original.refs/{print$2}'per trovare tutti i backup di cui dispone il repository.
Dan

4

Ho avuto lo stesso problema e la risposta sopra non lo ha risolto. Non era rimasta alcuna directory .git / refs / original /. La soluzione per me era eliminare il file .git / imballato-refs.


Stesso problema. Nessun .git/packed-refsfile, tuttavia, e nessuna cartella originalin formato .git/refs. Chiunque?
XedinUnknown

Risolto qui aggiungendo il -rflag al comando.
XedinUnknown

Stesso problema qui. L'eliminazione di file ref compressi ha risolto il problema, ma ha anche rovinato il resto della mia directory git e ho dovuto eseguire il ripristino dal backup.
Kevin Yin

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.