关于squashing、rebasing、reset --soft对GitHub贡献页影响的咨询
Squash/Rebase合并对GitHub贡献地图的影响
答案很明确:是的,那些过去两个月的贡献方块会被移除,取而代之的是你执行squash/rebase操作后生成的单个提交对应的日期方块。
这里的核心逻辑和Git的历史特性以及GitHub贡献统计的规则有关,我给你拆解一下:
- GitHub的贡献地图是根据仓库中当前分支历史里存在的提交的作者日期来生成的。每一个用你关联GitHub账号的邮箱作为作者的提交,都会在对应的日期方块上计数。
- 当你用
squash或者rebase合并多个提交为一个时,本质上是在创建全新的提交,同时把原来的那些旧提交从当前分支的历史中彻底移除(如果没有其他分支、标签引用这些旧提交,它们最终会被Git的垃圾回收机制清理掉)。既然旧提交不在分支历史里了,GitHub自然不会再把它们算进贡献统计里。 - 新生成的单个提交的作者日期默认是被合并的最后一个提交的作者日期,你也可以在squash时手动修改这个日期。不管是哪种情况,贡献地图上只会在这个新的作者日期对应的位置显示一个计数方块,而原来两个月里分散的那些方块都会消失。
举个实际场景:假设你过去60天里有40个工作日都提交了代码,贡献地图上有40个方块。当你把这些提交squash成一个并推送到远程仓库覆盖原分支后,那40个方块都会消失,只会在新提交的作者日期那天显示一个方块(比如你最后一次提交的日期,或者你手动指定的某个日期)。
如果你想兼顾分支整洁和贡献记录,有个折衷方案:在你的开发分支上保留所有原始提交,只在合并到主分支时执行squash操作。这样你的开发分支提交仍然会被GitHub计入贡献统计,主分支的历史也能保持简洁。
内容的提问来源于stack exchange,提问作者riace
相关产品推荐
相关产品推荐

