Git提交日期不在对应标签日期区间的原因咨询
git log 2.0.7..2.1 -- wp-includes/functions.php会出现早于2.0.7标签日期的提交? 这其实是Git分支模型和提交历史特性导致的正常现象,核心原因是你查询的提交范围是「2.1包含但2.0.7不包含的提交」,而这些提交的创建日期和标签的打标日期是完全独立的两个时间点。具体可以拆解成几个常见场景:
1. 提交来自更早的开发分支,后期才合并到2.1的分支中
WordPress早期采用稳定分支+开发分支并行的策略:比如2.0.x是维护旧版本的稳定分支,而master是开发下一个大版本(2.1)的分支。
假设在2006年2月,开发者在master分支上修改了functions.php,但这个修改因为是新特性,没有被回传到2.0.x分支。之后2.0.x分支继续发布补丁,直到2007年1月15日打出2.0.7的标签;而master分支继续迭代,直到2007年1月23日打出2.1的标签。
当你用2.0.7..2.1查询时,Git会找出所有在2.1历史里但不在2.0.7历史里的提交——那些2006年的master分支提交自然会被包含进来,它们的提交日期是创建时的2006年,和2.0.7的标签日期完全无关。
2. Git提交日期和标签日期是两个独立概念
你提到的「版本2.0.7的发布日期」其实是标签的创建日期(tagger date),而提交记录里的日期是提交的创建日期(commit date):
- 标签日期是团队正式打标签发布版本的时间(比如2007年1月15日发布2.0.7补丁);
- 提交日期是开发者当初编写并提交代码的时间(比如2006年2月,当时正在为2.1版本开发新功能)。
Git不会因为你后来打了标签就修改提交的原始日期,所以这些早于标签日期的提交出现在结果里完全正常。
3. 可能存在「回溯打标签」的情况
虽然可能性稍小,但如果2.0.7的标签是回溯打在一个更早的提交上(比如团队在2007年1月15日,把标签打在了2006年某个已经稳定的提交上作为补丁版本),那2.0.7指向的提交本身的日期就早于标签日期,但你查询的是2.0.7..2.1,所以那些在2.1里但不在这个早提交里的记录,自然会有更早的日期。
简单总结:Git的范围查询只关心提交是否在某个分支的历史链中,不关心提交日期和标签日期的先后顺序——只要某个提交属于2.1的历史但不属于2.0.7的历史,不管它什么时候创建的,都会被列出来。
内容的提问来源于stack exchange,提问作者Amine Barrak

