Git blame --incremental输出中的sourceline与resultline是什么?
关于
git blame --incremental中sourceline和resultline的解释 我来帮你理清这两个字段的含义,结合Git官方文档的定义和实际使用场景拆解一下:
先明确核心背景
git blame --incremental的输出是Git在逐步构建blame结果过程中实时产生的,输出顺序是按提交新旧倒序排列的,专门给交互式工具解析使用,格式和Porcelain格式类似,但不会附带被注释文件的实际行内容。每个blame条目开头是40位SHA-1哈希,后面跟着各类描述字段,其中sourceline和resultline是描述行位置的关键项。
sourceline:源提交中的行号
这个字段对应的是当前提交的父版本文件里,该行内容原本所在的行号:
- 如果这一行是从父提交中继承而来(未被当前提交修改),
sourceline就是父提交文件中该行的行号; - 如果这一行是当前提交新增的(父提交里完全没有这行内容),
sourceline会显示为0; - 简单来说,它记录的是这一行“起源位置”的原始行号。
resultline:最终结果中的行号
这个字段对应的是你运行git blame时,目标文件当前版本中该行的实际行号:
- 不管这一行是继承来的、新增的还是被修改过的,
resultline就是它在最终文件里的真实位置; - 这也是你用普通
git blame(不带--incremental)命令时,左边显示的那个行号。
举个直观例子:假设你在父提交的文件第5行后面新增了一行内容,那么在这个新增提交的blame条目中,sourceline是0,而resultline是6(因为新增后它在当前文件的第6行);如果是修改了父提交的第3行,且没有其他行变动,那么sourceline是3,resultline也还是3。
额外补充:因为
--incremental是增量输出模式,这些字段是Git在逐步计算blame结果时实时吐出的,能让交互式工具不用等整个blame计算完成就可以开始处理内容。
内容的提问来源于stack exchange,提问作者micnil
相关产品推荐
相关产品推荐

