Ho accidentalmente commesso log/test.log ma non l'ho mai spinto. Da allora ho fatto un tentativo per sbarazzarmene. Ma quando provo a spingere, sto ancora ricevendo un'enorme quantità di dati che tentano di essere trasferiti. Non dovrebbe il git rm risolvere questo problema. In caso contrario, come posso risolverlo?git push dopo la rimozione di file di grandi dimensioni
risposta
Non ripristinare il commit e quindi premere perché l'enorme file verrà comunque trasportato nella cronologia.
Dato che non si è ancora spinto e che il commit si vuole rifare è il più recente, rimuovere che commettono dalla cronologia:
$ git reset HEAD^
Questo restituirà l'indice di stato in cui era in sul commit padre (HEAD^
). Ora hai un mulligan: aggiungi e commetti come volevi per la prima volta.
Se sono stati effettuati altri commit successivi, è necessario git rebase -i <commit>
dove <commit>
è lo SHA-1 del genitore del commit errato.
Per esempio (e notare l'SHA-1 sarà diverso nel vostro repo)
$ git rebase -i 57d0b28
vi porterà in un editor che assomiglia
pick 366eca1 This has a huge file pick d975b30 delete foo pick 121802a delete bar # Rebase 57d0b28..121802a onto 57d0b28 # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. #
Sostituire pick
con edit
sulla linea con il commit pesante
edit 366eca1 This has a huge file pick d975b30 delete foo pick 121802a delete bar
Salva ed esci il vostro editor per tornare alla shell, dove vedrete un messaggio del modulo
Stopped at 366eca1... This has a huge file You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue
Da lì, cancellare il file incriminato (--cached
rimuove il file da solo l'indice)
$ git rm --cached big-nasty-file rm 'big-nasty-file'
modificare il commit
$ git commit --amend
e finire il rebase
$ git rebase --continue
Se non è stato premuto, è possibile utilizzare git rebase -i
per modificare la cronologia dei commit, rimuovere sia lo add
che lo rm
. L'unica avvertenza è che bisogna stare attenti a non modificare alcun commit già spinto.
http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive
Lei ha chiesto se si può ancora fare questo se ci sono altri cambiamenti nelle commit e altri commit seguito questo. Dipende. Dovresti essere in grado di modificare/rimuovere qualsiasi commit non premuto, non solo il più recente. Tuttavia, il rebase potrebbe non riuscire se le modifiche successive dipendevano in gran parte dalle modifiche nel commit cancellato (ad esempio, è stato aggiunto un file, quindi modificato in un commit successivo). Se elimini un commit, perderai tutte le modifiche in quel commit. Non conosco un modo per rimuovere una singola modifica da un commit. Se non si desidera perdere le altre modifiche nel commit test.rb, è possibile generare una patch (con git show <commitid> > /tmp/patch
o con le funzioni incorporate git patch
) prima di eliminare il commit. Quindi modifica il file di correzione per rimuovere il test.rb di grandi dimensioni, ma lascia le modifiche desiderate e riapplica la patch alla testa.
Se avete il problema che ho già detto in precedenza, dove rebase non riesce (o si pensa che fallirebbe), si potrebbe risparmiare patch per tutte dei tuoi commit dopo il problema commesso, li elimina, e riapplicare in ordine.
Anche se non ho spinto, ho fatto diversi commit da allora. Rebase è ancora un'opzione? (Il commit con il log accidentale/test.rb conteneva un sacco di file) – Daniel
- 1. errore git push a causa di inesistenti file di grandi dimensioni
- 2. PDFbox caricamento di file di grandi dimensioni
- 3. Il mio git push è bloccato su un file di grandi dimensioni. Cosa fare?
- 4. Estensione di file di grandi dimensioni per git
- 5. Git: Stop git push
- 6. File JSON di grandi dimensioni
- 7. Teamcity dopo il push del git push
- 8. Elaborazione di file xlsx di grandi dimensioni
- 9. Caricamenti di file di grandi dimensioni
- 10. Git - la spinta di un ramo remoto per un progetto di grandi dimensioni è molto lenta
- 11. Perché esistono ancora file di grandi dimensioni nel mio file pack, dopo averli strofinati con il filtro-ramo?
- 12. Elaborazione di file xml di grandi dimensioni
- 13. CodeIgniter Caricamento di file di grandi dimensioni
- 14. git push dopo git filter-branch respinto
- 15. git push .git/file descrizione
- 16. Android: scarica file di grandi dimensioni
- 17. Modifica git paternità dopo git push
- 18. Risistemazione di un repository git rallentato a causa di file binari di grandi dimensioni
- 19. xmlstarlet sel su file di grandi dimensioni
- 20. Carica file di grandi dimensioni nginx + uwsgi
- 21. Rimozione di caratteri non UTF-8 da file txt di grandi dimensioni
- 22. Excel non apre file di grandi dimensioni
- 23. Supporto file di grandi dimensioni in C++
- 24. Come organizzare file di grandi dimensioni?
- 25. Xampp - PHPMyAdmin carica file di grandi dimensioni?
- 26. Leggi file di grandi dimensioni in parallelo?
- 27. Caricamento file di grandi dimensioni con WebSocket
- 28. Come posso dividere file di grandi dimensioni?
- 29. Leggere file di grandi dimensioni in Java
- 30. File di grandi dimensioni e hashing - preoccupazione
Come si ottengono gli indirizzi SHA1 per i propri commit? – Daniel
@Daniel Esegui 'git log' o' gitk', ad esempio. –