Sembra che il mio impegno iniziale stia mangiando il 90% dello spazio, dato che è stato accidentalmente creato con un bel po 'di file multimediali. C'è un modo per rimuovere solo il primo commit da repository locali e remoti, o dovrei semplicemente lasciare questo essere?Posso rimuovere il commit iniziale da un repository Git?
risposta
Sembra che tu abbia già condiviso il repository con un numero di altri utenti. Se questo è il caso, probabilmente dovresti semplicemente conviverci.
Se si ha il controllo di tutti i cloni, è possibile riscrivere la cronologia su un commit radice modificato con i file non desiderati rimossi. Nota che non dovresti farlo se altri sviluppatori hanno già lavorato su questo ramo.
Se si è interessati alla riscrittura della cronologia, è possibile provare quanto segue. Si noti che poiché git mantiene i registri di dove è stato recentemente eseguito il commit HEAD (reflog), gli oggetti di grandi dimensioni non scompariranno immediatamente dal repository o da altri repository che li hanno già, anche se si tenta di git gc
o git gc --prune
. Tuttavia, garantirà che eventuali nuovi cloni non finiranno per il recupero degli oggetti di grandi dimensioni come parte della cronologia del ramo principale.
Supponendo che la directory di lavoro è 'pulito':
# Go back the initial commit
git checkout <SHA1_of_old_root>
# Clean up the index to remove unwanted files, e.g. using git rm <files>
# ...
# Amend the initial commit with the new tree. Note the sha1 of the new commit
git commit --amend
# Go back to the master branch
git checkout master
# Re-apply all the commits onto the new root
git rebase --onto <SHA1_of_new_root> <SHA1_of_old_root>
In alternativa è possibile utilizzare per rimuovere git filter-branch offendere file (vedere la sezione esempi), ma è anche riscrivere la storia. Quindi chiunque abbia basato il proprio codice in cima alla propria vecchia cronologia subirebbe una cattiva sorpresa ...
il filtro-ramo gestirà anche meglio (o almeno richiederà meno interazione) se le modifiche ai file indesiderati sono state tracciate dal commit della radice. –
- 1. rimuovere un referenziata commit dalla repository git
- 2. Come ripristinare il commit git iniziale?
- 3. git posso accelerare il commit?
- 4. git: rimuovere 2nd commit
- 5. Rimuovere completamente un file dall'intero repository git
- 6. Come posso rimuovere i commit separati da git?
- 7. Come scaricare un commit Git specifico da un repository?
- 8. Come posso annullare l'ultimo commit in un repository git bare?
- 9. Come eseguire il commit di un repository git all'interno di un altro repository git
- 10. Come reimpostare un repository GIT remoto per rimuovere tutti i commit?
- 11. Posso clonare un repository git da BitBucket?
- 12. Numero di commit in un repository git
- 13. Come proteggere un file nel repository git da commit dopo il primo commit?
- 14. Rimuovere del tutto un changeset specifico dal repository Git?
- 15. Elimina dati binari da un repository git dopo il fatto
- 16. Come rimuovere un repository Git locale da TortoiseGit?
- 17. Git commit da python
- 18. Come rimuovere l'albero di lavoro da un repository Git
- 19. Come rimuovere un repository git dal Browser Repository su Netbeans?
- 20. Aggiungi/commit al repository da una cartella non-git
- 21. Rimuovere la directory '.git' da git repo?
- 22. API GitHub v3: come creare il commit iniziale per il mio nuovo repository brillante?
- 23. Posso scaricare un repository git senza git?
- 24. Git: rimuovere le credenziali dal repository
- 25. rimozione repository git locale da Xcode Project?
- 26. Come rimuovere un commit che è stato trasferito al repository remoto usando Git
- 27. Impossibile eseguire il commit delle modifiche al repository git locale
- 28. Come fare riferimento al commit iniziale?
- 29. Come posso annullare un commit Git DOPO un git push?
- 30. Modifica di un commit Git su un repository condiviso
Esiste anche 'git rebase --root'. Per i dettagli vedere la seguente risposta SO per i dettagli: http://stackoverflow.com/questions/2246208/change-first-commit-of-project-with-git – MKroehnert