Мерзавец винить на линии, измененной несколько раз?

Если строка изменялась назад и вперед между двумя версиями несколько раз, git blame, кажется, показывает только последние коммиты в этой строке.

можно ли было бы показать все коммиты на этой линии?

5 ответов

Решение

git blame не могу сделать это сам (но см. ниже для обхода).

Но git gui имеет режим вины, который позволяет углубляться в коммиты.

Вызвать его с git gui blame <filename> после установки.

Я не знаю, как отобразить все коммиты в этой строке одновременно, но вы можете "просверлить" каждое изменение в строке, используя git blame SHA~ -- filename, На каждой итерации обвинения просто вставьте следующий "последний" SHA, который изменил эту строку.

Пример: при первом запуске git blame foo.php Вы видите, что линия была изменена f8e2e89a, так что вы выходите и бежите git blame f8e2e89a~ -- foo.php, git покажет вам, кто изменил строку раньше f8e2e89a, Промойте и повторите при необходимости.

Вы не можете делать то, что вы хотите с git blame, но вы можете приблизиться с помощью алгоритма сравнения слов или другого пользовательского инструмента сравнения. В частности, вы могли бы показать построчное слово diff в выходных данных журнала следующим образом:

# Show deletions delimited with [- -], and additions with {+ +}.
git log --patch --word-diff=plain

Смотрите также

Извлечение информации об авторстве из репозитория git

Цель git blame чтобы показать, какой коммит был изменен последним, какие строки в конкретном файле. Он не имеет возможности показывать несколько версий одной и той же строки.

На основе ответов, уже предоставленных здесь, я создал скрипт под названием git-rblame в моем ПУТИ со следующим содержанием:

#!/bin/bash

revision="HEAD"

while [ -n "${revision}" ]
do
    result=$(git blame "${revision}" "$@")
    revision="${result%% *}"
    if [[ "${revision}" != [a-z0-9]*[a-z0-9] ]]
    then
        revision=""
    else
        echo "${result}"
        revision="${revision}~"
    fi
done

Тогда я могу позвонить git rblame -L xxx,yyy myfilename и я получу полную историю для файла, соответствующего данному содержанию. Учитывая тот факт, что номер строки может измениться, значимое регулярное выражение, кажется, работает лучше.

Другие вопросы по тегам