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