Найти коммиты git, связанные с определенной частью файла - PullRequest
8 голосов
/ 03 марта 2011

Дело
Довольно часто я смотрю на какой-то старый код, который выглядит неправильно.Похоже, что-то было удалено (например, у него есть цикл, который ничего не делает, или он создает переменную, но не использует ее), или что-то просто трудно понять.В этих случаях мне действительно нужно увидеть историю этого раздела файла.Но не весь файл, только этот раздел или функция.

Идеальное решение
Простая команда, такая как

git log books.cpp:10

, чтобы найти историю строки 10(возможно, с окружением) файла books.cpp, вероятно, слишком много волшебства, чтобы спросить, но есть ли у вас идеи о том, как разработать эту историю?

Что я пробовал
Я пытался использовать вину , а затем проверять коммит перед заданным коммитом этой строки - повторять его, пока не увижу достаточно.Но это очень утомительная работа.

Чувствовали ли вы необходимость в этой функции?У вас есть способ достичь этого?Поделитесь своим опытом!

Ответы [ 2 ]

4 голосов
/ 03 марта 2011

Git очень легко расширить. Достигает ли что-то подобное того, чего вы хотите?

#!/bin/bash

FILENAME=$1
LINENUMBERS=$2

for hash in `git log --pretty=format:%h ${FILENAME}`
do
    echo "***************** Showing ${FILENAME} at ${hash}"
    git blame -L ${LINENUMBERS} ${hash} ${FILENAME}
done

Поместите этот маленький скрипт в свой путь как что-то вроде git-linehistory и назовите его так:

git linehistory books.cpp 5,15

Он покажет вам, как выглядят строки с 5 по 15 при каждом коммите для этого файла.

2 голосов
/ 03 марта 2011
Опция
  • git blame -L позволяет указать диапазон строки для вывода или даже регулярное выражение для соответствия требуемой функции.
  • Вы также можете указать обвинить в конкретном коммите, затем выне нужно проверять ревизию перед обвинением.

Таким образом, вы можете сделать последовательные вызовы на git blame -L range <commit> <file-name>, чтобы просмотреть историю построчных изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...