Тур по Git
Продвинутый Git / Урок 5.8

git blame — Кто что изменил?

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

Когда использовать git blame

  • Отладка — «Кто написал эту строку? Каков был контекст?»
  • Понимание кода — «Когда была добавлена эта логика?»
  • Код-ревью — «Кого спросить об этом участке?»

Базовое использование

git blame filename.txt

Вывод выглядит так:

a1b2c3d (Alice  2024-01-15  1) function login(user) {
e4f5g6h (Bob    2024-02-20  2)   validateInput(user);
a1b2c3d (Alice  2024-01-15  3)   return authenticate(user);
i7j8k9l (Alice  2024-03-01  4)   logAttempt(user);
a1b2c3d (Alice  2024-01-15  5) }

Каждая строка показывает:

  • SHA коммита — какой коммит последним изменил эту строку
  • Автор — кто сделал изменение
  • Дата — когда было сделано изменение
  • Номер строки — текущий номер строки
  • Содержимое — собственно строка кода

Чтение вывода

Строки с одинаковым SHA были изменены в одном и том же коммите. Это говорит о том, что они были частью одного логического изменения.

В примере выше:

  • Строки 1, 3, 5 из оригинального коммита Alice (a1b2c3d)
  • Строка 2 была добавлена Bob позже (e4f5g6h)
  • Строка 4 была добавлена Alice в более новом коммите (i7j8k9l)

Полезные флаги

ФлагНазначение
-L 10,20Показать blame только для строк 10-20
-L :functionNameПоказать blame для конкретной функции
--since="2 weeks ago"Показать только недавние изменения

git blame и git log

ИнструментПоказывает
git blame <file>Построчную атрибуцию для текущего состояния файла
git log -- <file>Все коммиты, затронувшие файл
git log -p -- <file>Все коммиты с диффами для файла

Используйте blame, чтобы узнать, кто изменил строку, затем show или log, чтобы понять почему.

Попробуйте!

  1. В репозитории есть файл с историей. Просмотрите его: cat app.txt
  2. Запустите blame, чтобы увидеть, кто изменил каждую строку: git blame app.txt
  3. Обратите внимание на разные SHA — каждый представляет отдельный коммит
  4. Проверьте детали конкретного коммита: git show <sha> (используйте SHA из вывода blame)

Не используйте blame для обвинений

Несмотря на название, git blame — это инструмент познания, а не инструмент для указания пальцем. Используйте его для понимания истории и контекста изменений кода. Цель — найти нужного человека, чтобы задать вопросы, а не возложить вину.

Ключевые моменты

  • git blame <file> показывает построчную атрибуцию коммитов
  • Каждая строка показывает SHA, автора, дату и содержимое
  • Используйте его для отслеживания истории конкретных строк
  • Сочетайте с git show для понимания полного контекста изменения
🎯

Цель

Используйте git blame чтобы увидеть кто изменил каждую строку app.txt

Terminal
$

No commits yet. Run `git init` and create your first commit.