Команди Git

git blame

git blame (англ. blame означає звинувачувати): показати построкову історію комітів для файлу.

Команда git blame показує, який коміт останнім змінив кожен рядок файлу, а разом із цим — автора, час і номер рядка. Це швидкий спосіб зрозуміти, чому рядок виглядає саме так, хто торкався його останнім і коли могла з'явитися регресія. Замість того щоб вручну перебирати всі коміти, можна одразу перейти до зміни, яка за це відповідає.

Вивід читається згори донизу, як і сам файл. Кожен рядок починається зі скороченого хешу коміту, далі йдуть інформація про автора, дата, початковий номер рядка і, нарешті, вміст рядка з файлу. git blame можна навести на файл у робочому дереві або на конкретний коміт (наприклад, HEAD~3), щоб дослідити старішу версію.

Результат:
1b2c3d4 (Jane Doe 2024-02-19  12) import React from "react";
5e6f7a8 (Jane Doe 2024-02-20  13) import {Button} from "./Button";
5e6f7a8 (Jane Doe 2024-02-20  14)
9a0b1c2 (Alex Roe 2024-03-01  15) export function Header() \{
9a0b1c2 (Alex Roe 2024-03-01  16)   return <Button>Buy tickets</Button>;
9a0b1c2 (Alex Roe 2024-03-01  17) }

Сценарії використання

  1. Визначити, звідки взявся рядок, щоб відкрити конкретний коміт, прочитати його повідомлення і зрозуміти задум, перш ніж змінювати чи скасовувати код.
  2. Швидко зібрати контекст про незнайомі файли — автора, час і початковий номер рядка. Так простіше ставити точні уточнювальні запитання або ділити роботу з командою.
  3. Відстежити регресії або встановити авторство: додай до знайденого коміту git show, щоб побачити, коли саме з'явилася помилка; або перенеси дані про автора в рев'ю, журнали змін чи документацію.

Приклади

Показати, хто останнім змінював кожен рядок файлу в поточному робочому дереві:

git blame src/components/Header.tsx

Обмежити вивід певним діапазоном рядків через опцію -L (початок і кінець включно):

git blame -L 25,40 src/components/Header.tsx

Знайти авторів рядків у версії файлу, яка існувала два коміти тому:

git blame HEAD~2 -- src/components/Header.tsx

Розділювач -- необов'язковий, але він не дає Git сплутати шлях до файлу з назвою ревізії.

Додати до виводу email автора, щоб було простіше зв'язатися:

git blame --show-email src/components/Header.tsx