GitHub:将已经提交的提交捆绑到一个提交中

GitHub: Bundle already commited commits into a single commit

我是 github 的新手。我上传了我的一个项目,不小心我也提交了我所有的二进制文件。我使用 github 的网站来管理我的项目并删除二进制文件。问题是每次我删除一个文件时,它都算作一次提交。

通常这没问题,但我是那种喜欢查看统计数据并了解它们如何演变的人。

现在,提交统计信息和其他与提交计数相关的统计信息一团糟,看起来项目正在迅速走下坡路,因为数百个手动删除的二进制文件都算作单个提交,而我的 2-8现在定期提交一天。

有什么好的方法可以将已提交的提交捆绑到单个提交或将它们从提交统计信息中删除吗?

我知道我可以删除该项目并重新上传,但我会丢失我的文件历史记录。

这个问题有很多答案。其中之一是

git rebase -i HEAD~n
// n will define the range of commits that you want to consider
// You can also use a SHA1 hash instead of HEAD~n

此交互式变基将向您显示提交列表。如果您想将它们全部压缩在一起,只需在每个提交(第一个提交除外)前加上 squash 前缀。这在将出现在您的命令行中的交互式 rebase 说明中进行了解释。

因此,如果您设置 n=4 并且您会看到:

pick 111111 // Random hashes
pick 222222
pick 333333
pick 444444

只需将其替换为

pick 111111
squash 222222
squash 333333
squash 444444

最终,这将导致包含这 4 次提交的代码更改的单个提交。请注意,这将 重写 git 提交历史。这 4 次提交将消失,并将被新的聚合提交所取代。

虽然这不是最简单的解决方案,但它确实提供了更大的灵活性。交互式变基还允许您重命名提交消息、重新排序提交等。如果您想将 2 个提交压缩为一个提交,并将其他 2 个提交压缩为一个提交,它还可以让您更细粒度。示例:

pick 111111
squash 222222
pick 333333
squash 444444

更多详情https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase-i/