2011-09-18 17 views
9

cioè ho:Git: come rimuovere la storia prima di una specifica commettere

root -- c1 -- c2 -- .. - c1000 -- c1001 -- c1002 -- .. -- c2000 -- top 

e voglio avere:

root = c1000 -- c1001 -- c1002 -- .. -- c2000 -- top 

Come?

(immagino che posso fare via git filter-branch, ma come esattamente?)

(Naturalmente so che questo significa la storia-riscrittura ...)

risposta

4

modo più semplice è con un innesto git. Se si modifica il file .git/info/innesti, si può mettere righe nel file del formato

[ref] [parent1] [parent2] ...

Qualsiasi commit riferimento sul lato sinistro vengono poi trattati come se i genitori elencati a destra sono i genitori di quello commettono. Così è possibile inserire una riga come

c1000

e sarà trattata come se non ha genitori. Questo può quindi essere "cotto nella pietra" eseguendo git-filter-branch.

9

ho trovato il seguito utile per la creazione di nuove operazioni pronti contro termine con una radice diversa (che è quello che penso si sta chiedendo quando dici rimuovere storia prima un commit):

git fast-export master~5..master | (cd ../newrepo.git && git init . && git fast-import && git checkout) 

(si può fare quanto sopra nello stesso repository)

+0

Grande consiglio! Molto utile per creare un progetto pulito dal ramo di un altro progetto, ma senza la seccatura di git filter-branch. – Claudio

+0

Questo post è piuttosto vecchio ma spero di ricevere una risposta. C'è un modo per mantenere gli ID di commit durante l'importazione? –

Problemi correlati