Анализ истории изменений
Программирование — это не только написание новых программ, но и постоянный анализ уже написанного кода. Иногда код понятен и без слов — и это хороший код.
Но так происходит не всегда. Код может вызывать вопросы. Почему он написан именно так, кто его написал и когда.
Ответить на эти вопросы помогает история изменений. Хорошо сделанные коммиты имеют понятное описание, и каждый из них делает ровно одну законченную вещь — в таком случае история становится мощным инструментом для анализа кода. Именно поэтому так важно хорошо понимать философию Git и следовать лучшим практикам при работе с ним.
Git предоставляет целую пачку команд со множеством опций, позволяющих вытащить невероятное количество информации и показать все, что скрыто. С ними мы познакомимся в этом уроке.
Команда git log
Самая простая аналитика выполняется командой git log
. Она показывает список всех выполненных коммитов, отсортированных по дате добавления. Сверху мы видим самые последние коммиты:
Из этого вывода мы можем узнать кто, когда и какие коммиты делал. Если коммиты оформлены хорошо, то по их описанию уже многое понятно. Оформление коммитов — отдельная тема, которую мы рассмотрим позже.
У команды git log
есть полезный флаг -p
, который сразу выводит диф для каждого коммита:
Команда git show
У каждого коммита есть уникальный набор символов — идентификатор (еще говорят «хеш»). С помощью хеша можно посмотреть все изменения, сделанные в рамках одного коммита:
Хеши коммитов в Git очень длинные, и ими бывает неудобно пользоваться. Поэтому разработчики Git добавили возможность указывать только часть хеша. Достаточно взять первые семь символов и подставить их в ту команду, которая работает с коммитами:
Чаще всего вам не придется высчитывать их самим. Большая часть команд Git выводит хеш коммита в сокращенном варианте, облегчая его использование. Такое упрощение хорошо работает, потому что даже первые семь символов будут всегда уникальными.
Команда git blame
А что если мы не знаем коммита, но нам интересно, кто последним менял конкретную строчку в файле? Для этого подойдет команда git blame <путь до файла>
. Эта команда выводит файл и рядом с каждой строчкой показывает того, кто ее менял и в каком коммите:
Важно помнить, что изменение строчки — не то же самое, что ее написание. Вполне возможно, что программист исправил небольшую опечатку, а саму строчку написал кто-то до него. Имея такой вывод, уже легко пойти дальше и изучить конкретный коммит.
Команда git grep
Команда git grep
ищет совпадение с указанной строкой во всех файлах проекта. Это очень удобная команда для быстрого анализа из терминала. Она удобнее обычного grep
, потому что знает про игнорирование и не смотрит в директорию .git, а еще умеет искать по истории:
GitHub
В простых ситуациях анализировать проект можно прямо на GitHub. Он позволяет просматривать историю коммитов, изменения в конкретном коммите и многое другое.
Самостоятельная работа
Выполните все команды из урока в нашем репозитории
Изучите историю репозитория ru-local-communities