git blame показує для кожного рядка файлу, в якому коміті й ким він востаннє змінений:
git blame app/Services/Billing.php
git blame -L 40,60 app/Services/Billing.php # лише рядки 40-60
a1b2c3d4 (Olena 2026-03-14 41) $total = round($subtotal * 1.2, 2);
Мета - не «кого звинуватити», а «чому так»: знайдений хеш веде до коміту з повідомленням, pull request і обговоренням, де видно причину рішення.
git show a1b2c3d4
Проблема: шумні коміти. Масове форматування (Pint, Prettier), перейменування чи перенесення коду роблять автором кожного рядка «коміт форматування», і справжня історія ховається.
Що допомагає:
| Параметр | Що робить |
|---|---|
-w |
ігнорує зміни пробілів |
-M |
розпізнає рядки, переміщені в межах файлу |
-C |
розпізнає рядки, перенесені з інших файлів того самого коміту (-C -C -C - з будь-якого коміту) |
--ignore-rev <хеш> |
пропустити конкретний коміт і показати попереднього автора |
Файл ігнорованих комітів - рішення для всієї команди:
# .git-blame-ignore-revs
# Pint: форматування всього проєкту
3f9e1a2b7c...
git config blame.ignoreRevsFile .git-blame-ignore-revs
GitHub автоматично враховує файл .git-blame-ignore-revs у корені репозиторію у своєму інтерфейсі blame.
Коли рядок змінювався багато разів:
git log -L 40,60:app/Services/Billing.php- вся історія змін саме цього фрагмента, з diff кожного кроку;git log -S "1.2"- коміти, що додали чи прибрали конкретний вираз;- в IDE blame вбудований («Annotate with Git Blame» у PhpStorm) з можливістю переходити до попередньої ревізії рядка.