发布部分git历史记录

时间:2010-01-04 16:04:15

标签: git commit

我想将git历史记录发布到公共存储库,但是想要删除旧的提交。我所看到的所有方法都会改变新提交的SHA1,这不是一个选项,因为我希望能够推送到修改后的repo。反正有吗?

3 个答案:

答案 0 :(得分:5)

如果您修改历史记录,那么您将不可避免地更改较新提交的SHA1哈希值。这是因为哈希基于整个历史记录,而不仅仅是最新的快照。这是设计用于捕获存储库任何部分的损坏(意外或恶意)。

答案 1 :(得分: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转换,我创造了这样一个野兽。

  

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

导出新分支。从那里,您可以将其视为主开发分支,将其他所有内容视为不会暴露的主题或历史分支。

答案 2 :(得分:0)

我肯定错过了一些东西,但你不能使用类似的东西:

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

在特定日期之后仅提取提交或:

git log -p 18f822e..HEAD

获取特定提交后的所有历史记录。