繁体   English   中英

压榨master分支的历史记录,但将所有先前的提交消息归咎于此?

[英]Squash master branch history but keep all prior commit messages in blame?

我一直在研究git南瓜,但是不确定它是否适用于我尝试做的事情。 我只知道git的基础,所以也许这是一件荒谬的事情。

我有一个主分支,可以说有10,000次提交。 让我们假设它看起来像这样:

1-2-3...5000...9999-10000

假设仓库中的所有文件在某些​​时间点已被修改。 例如,“ test.php”文件的提交值为1,2,3,2500,6000

现在,我要做的是使master分支的整个历史记录始于commit 5000,但保持提交日志不变? 这有可能吗?

例如,将责任归咎于“ test.php”:

<commit 1> | echo 'hello world';
<commit 2> | echo 'another line in the file';
<commit 6000> | echo 'sometime later';

我对为什么要这样做的想法很简单。 在这一点上,我将永远不会回退超过commit 5000的代码,但是很高兴看到谁进行了更改。 这也将减小结帐的大小,这在当时非常大。

当从提交历史记录注释源文件中的行时,Git会获取显示的信息。 因此,如果您删除了部分提交历史记录,那么该信息将不再适用于git。

仅仅因为您不想在进行某些提交之前就回滚并不是放弃历史的原因。 保留它还有更多的原因, git annotate只是其中之一。

因此,您要解决的唯一问题似乎是克隆时需要传输的数据量。 您可以通过使用--depth选项对git clone创建浅表克隆来减少这种情况。 这样,历史记录仍将在某些远程服务器上可用,但是您可以选择要复制到克隆中的历史记录数量。

浅表克隆也是确定通过压缩历史记录可以节省多少空间的好方法。 请注意,-- --depth通过两种不同的方式节省空间:它仅克隆远程当前指向的单个分支HEAD ,并且仅将该分支克隆到特定深度。 您还可以使用--no-single-branch选项来获得更多可比较的数字,以判断是否值得挤压历史记录。 多数情况并非如此。

要在本地测试--depth的效果,您可以

git clone --no-local --no-hardlinks --no-single-branch --depth 100 path/to/repository path/to/clone

这将创建本地存储库的浅表克隆,同时覆盖通常的本地优化。 然后,您可以使用

du -sm path/to/repository
du -sm path/to/clone

压缩提交将重写历史记录, 将是做出更改的人,而将是受到指责的人。 如果有一千个人进行了更改,而一个人决定将所有这些更改压缩为一个大更改,那么谁做了那个大更改? 压榨一切的人。 Git忘记了其他更改,因为历史被重写了。

换句话说,这是不可能的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM