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, чтобы понять почему.
Попробуйте!
- В репозитории есть файл с историей. Просмотрите его:
cat app.txt - Запустите blame, чтобы увидеть, кто изменил каждую строку:
git blame app.txt - Обратите внимание на разные SHA — каждый представляет отдельный коммит
- Проверьте детали конкретного коммита:
git show <sha>(используйте SHA из вывода blame)
Не используйте blame для обвинений
Несмотря на название, git blame — это инструмент познания, а не инструмент для указания пальцем. Используйте его для понимания истории и контекста изменений кода. Цель — найти нужного человека, чтобы задать вопросы, а не возложить вину.
Ключевые моменты
git blame <file>показывает построчную атрибуцию коммитов- Каждая строка показывает SHA, автора, дату и содержимое
- Используйте его для отслеживания истории конкретных строк
- Сочетайте с
git showдля понимания полного контекста изменения