2011-09-18 15 views
9

yanı, ben:Git: nasıl işlemek spesifik bir önceki geçmişini silmek için

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

ve ben sahip olmak istiyorum:

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

nasıl?

(Ben git filter-branch aracılığıyla yapabiliriz sanırım, ama tam olarak nasıl?)

(Tabii ki bu tarih-yeniden yazma demek olduğunu biliyorum ...)

cevap

4

kolay yolu bir git greft olduğunu. Eğer dosya .git/bilgi/greft düzenlerseniz, Herhangi sol tarafta başvurulan taahhüt eder

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

sonra sağda listelenen veliler ise olarak kabul edilir biçimi Dosyadaki satırları koyabilirsiniz bu taahhüdün ebeveynleri. Yani

c1000

gibi bir satır ekleyebilirsiniz ve hiçbir anne varmış gibi işlem görecektir. Bu daha sonra git-filtre-dalı çalıştırarak "taş olarak pişirilebilir".

(Ben bir taahhüt önce geçmişini kaldırmak derken soruyorsun ne düşündüğünü olan) farklı bir kökü ile yeni repolar oluşturmak için aşağıda yararlı bulduk
9

:

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

(yukarıda yapabilirsiniz Aynı repoda da)

+0

Büyük bahşiş! Başka bir projenin şubesinden temiz bir proje oluşturmak için çok kullanışlıdır, ancak git filtresi-dalışı sıkıntısı olmadan. – Claudio

+0

Bu yazı oldukça eski ama umarım bir cevap alırım. İthalat sırasında Commit kimliklerini korumanın bir yolu var mı? –

İlgili konular