2010-01-04 112 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转换,我创造了这样一个野兽。

一个项目也可以有多个根,尽管这并不常见(或者一定是个好主意)。

导出新分支。从那里,你可以把它当作主发展分支,把其他的东西当作一个没有暴露的主题或历史分支。