Команды Git

git blame

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

Команда git blame показывает, в каком коммите последний раз менялась каждая строка файла, а заодно выводит автора, время и номер строки. Это быстрый способ понять, почему код выглядит именно так, кто его трогал последним или когда закралась ошибка. Вместо того чтобы перебирать все коммиты вручную, можно сразу прыгнуть к правке, которая затронула нужную строчку.

Вывод читается сверху вниз, прямо как сам файл. Каждая строка начинается с короткого хеша коммита, затем идут данные автора, дата, номер оригинальной строки и, собственно, её содержимое. Команду git blame можно натравить как на файл в рабочем дереве (working tree), так и на конкретный коммит (например, 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 blame и скормить его команде 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