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) }Зачем это нужно
- Выяснить, откуда взялась строка, чтобы открыть тот самый коммит, прочитать его сообщение и понять задумку автора перед тем, как что-то менять или отменять.
- Быстро собрать контекст по незнакомому файлу, включая имя автора, дату и оригинальный номер строки. Так гораздо проще задавать предметные вопросы или делить задачи с коллегами.
- Найти причину ошибки или узнать, кто работал над задачей. Для этого можно взять хеш коммита из
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.gitignoregit checkoutgit configgit taggit worktree