2010-01-04 111 views
4

我想將我的git歷史記錄發佈到公共存儲庫,但希望刪除舊的提交。我所見過的所有方法都會改變新的提交的SHA1,這不是一種選擇,因爲我希望能夠推送到修改後的回購。無論如何要做到這一點?發佈部分git歷史

+0

爲什麼這不是一個選項?你仍然可以推到新的回購。但是,是的,改變歷史會創造新的哈希值 - 這是Git的加密安全性的一部分。否則,任何人都可以僞造你的回購,並聲稱它與你的相同! – 2010-01-04 16:06:14

回答

5

如果您修改歷史記錄,那麼您將不可避免地更改較新提交的SHA1哈希值。這是因爲哈希基於整個歷史,而不僅僅是最新的快照。這是通過設計來捕捉存儲庫任何部分的腐敗(意外或惡意)。

1

我肯定失去了一些東西,但你不能使用類似:

git log --since="2009-1-1" -p 

某一日期之後僅提取提交或:

git log -p 18f822e..HEAD 

讓所有的歷史經過特定的提交。

+0

他寫了「歷史」,但文字表明他的意思是「部分存儲庫」。 – gimpf 2011-02-25 16:41:48

4

Ben James'評論是準確的。但是,你可以做的是在你當前的倉庫中啓動一個新的分支。從那裏,建立該分支的歷史,如你所願。發佈時,只需將該特定公共分支推出即可。這將爲您提供您正在尋找的功能。

下面是我只是做了它在我的測試案例:你想隱藏的

git branch stackoverflow #Get myself a working branch from current 
git rebase -i deadbeef #0xDEADBEEF is the hex of my first commit 

壁球一切。請注意,如果您有一個具有多個根的存儲庫,那麼git將獲得PISSED。這不應該是可能的,但我剛剛發現,通過一些神奇的svn轉換,我創造了這樣一個野獸。

一個項目也可以有多個根,儘管這並不常見(或者一定是個好主意)。

導出新分支。從那裏,你可以把它當作主發展分支,把其他的東西當作一個沒有暴露的主題或歷史分支。