/ / git annulla gli effetti del commit push sulla dimensione del repository - garbage-collection, git-push, annulla

git annulla gli effetti del commit push sulla dimensione del repository - garbage-collection, git-push, annulla

La domanda di annullare un push precedente su un repository remoto è stata più volte richiesta, ma mi sembra che le risposte siano incomplete. Seguendo i suggerimenti in Git - Annulla commit commesso, Sono in grado di ripristinare un repository remoto in modo cheil suo comportamento è come se l'ultimo commit non fosse mai avvenuto. Tuttavia, sembra che gli effetti del commit annullato vengano ancora visualizzati nella dimensione del repository git.

Ecco la situazione ipotetica: Un utente lo fa git add, git commit che mette un file enorme, "BigFatFile.bin "nel controllo della versione.Posta le modifiche al repository remoto. Supponiamo che questo file sia ENORME, forse 1 GB. Non vogliamo mantenere tali file in git. Quindi proviamo a annullare questo commit errato come segue:

  1. Clona il repository remoto.
  2. Fare git reset --hard HEAD^ rimuovere l'ultimo commit.
  3. Fare git push -f per inviare modifiche al repository remoto.

Questo sembra funzionare, tranne per il fatto che gli effetti del push sono ancora visibili nella dimensione del repository remoto. Le sue dimensioni sono cresciute di 1 GB.

È possibile sulla copia locale del repository eseguire i passaggi di pulitura, utilizzando git reflog e git gc e git repack, che riduce la dimensione del repository locale a ciò che era prima del commit di "BigFatFile.bin". Ma facendo a git push (o git push -f) non sembra ridurre le dimensioni del repository remoto.

Come posso annullare definitivamente l'ultimo commit premuto in modo che la dimensione del repository ritorni a ciò che era prima del push?

risposte:

1 per risposta № 1

La dimensione del repository remoto non dovrebbe essere rilevante per i client che la stanno clonando: il repository clonato dovrebbe essere di nuovo piccolo.

Come ho detto in "Pulisci file di grandi dimensioni sul server git", dovresti eseguire il git gc; git repack -Ad; git prune sul lato server, al fine di garantire che le dimensioni del repository si restringe.
A seconda del server, ciò potrebbe non essere possibile. Ad esempio, se si tratta di un repository GitHub ospitato, è necessario contattare il supporto GitHub per garantire che venga eseguita l'operazione di pulizia.