Я не верю, что для этого есть что-то встроенное. Это усложняется тем фактом, что редко бывает, что одна строка меняется несколько раз без существенного изменения остальной части файла, поэтому вы, как правило, в конечном итоге будете сильно менять номера строк.
Если вам повезло, что в строке всегда есть некоторая идентифицирующая характеристика, например, присваивание переменной, имя которой никогда не менялось, вы можете использовать регулярное выражение для git blame -L
. Например:
git blame -L '/variable_name *= */',+1
Но это только находит совпадение first для этого регулярного выражения, поэтому, если у вас нет хорошего способа сопоставления строки, это не слишком полезно.
Вы могли бы что-то взломать, я полагаю. У меня нет времени писать код только сейчас, но ... что-то в этом роде. Запустите git blame -n -L $n,$n $file
. Первое поле - это предыдущий коммит, а второе - номер строки в , который фиксирует, так как он мог измениться. Возьмите их и запустите git blame -n $n,$n $commit^ $file
, то есть то же самое, начиная с коммита до последнего изменения файла.
(Обратите внимание, что это не даст вам результата, если последний коммит, который изменил строку, был коммитом слияния. Основной способ это могло произойти, если строка была изменена как часть разрешения конфликта слияния.)
Редактировать: Я встречался в этом посте списка рассылки с марта 2011 года сегодня, в котором упоминается, что tig
и git gui
имеют функцию, которая поможет вам сделать это. Похоже, что функция была рассмотрена, но не завершена, для самого git.