2012-10-26 16 views
6

Ho un repository di grandi dimensioni git in 3 anni, voglio cancellare la cronologia delle modifiche che erano più di un anno fa. È possibile? Può usare git rebase ma come?Git remove history commegna

+0

Git è fatto per salvare le tue modifiche. Qual è l'effetto dell'eliminazione della cronologia? –

+0

La mia cronologia è troppo grande, la directory .git è più grande di 400 MB, in ogni clone devo scaricare tutta questa cronologia :( – paweb

+0

Possibile duplicato: [Come rimuovo la vecchia cronologia da un repository git?] (Http://stackoverflow.com/questions/4515580/how-do-i-remove-the-old-history-from-a-git-repository) –

risposta

3

Indagare la magia nera denominata git replace in this article from the Pro Git book che utilizza le circostanze esatte come esempio. Fondamentalmente, se riesci a trovare un punto nella cronologia che vuoi agire come la nuova radice, puoi sostituirla con un commit che non ha genitori, come se fosse stato creato dal nulla. È anche possibile memorizzare l'albero originale su una singola macchina, semplificando il ripristino della cronologia se ne hai ancora bisogno.

Si noti che un problema con git rebase (e git replace, per quella materia) è che si desidera riscrivere l'intero albero, inclusi i rami, in modo che puntino tutti a commit diversi. Ciò ha anche la conseguenza di rendere difficile per gli altri membri della tua squadra unire le loro modifiche, poiché tutti i genitori hanno SHA diversi rispetto a prima.

+1

Da quello che ho letto , la cosa '' git replace'' non funzionerà attorno al problema degli hash cambianti –

+1

@Jonas Hai ragione Riorganizzati la mia risposta per chiarire –

+1

Grande! Sarebbe anche un grosso bug in git se potresti sostituire un'intera storia senza alcun cambiamento negli hash, dopotutto quegli hash crittografici sono uno dei motivi per usare git. –