Управление историей и журналом в Git

GitGitBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Добро пожаловать, путешественник по времени Git! Сегодня мы отправимся в увлекательное путешествие по истории ваших проектов Git. Одна из самых мощных возможностей Git — это способность отслеживать и отображать историю проекта. Эта история не просто запись того, что произошло, но и мощный инструмент для понимания, отладки и улучшения вашего проекта.

В этом лабораторном занятии мы рассмотрим команду git log, которая является вашим окном в исторические записи Git. Мы начнем с базового использования, а затем углубимся в более продвинутые техники, такие как форматирование вывода журнала, фильтрация журналов по дате, поиск конкретных изменений и даже генерация статистики из истории проекта.

К концу этого лабораторного занятия вы сможете профессионально перемещаться по истории проекта, извлекая ценную информацию и инсайты, которые сделают вас более эффективным разработчиком. Независимо от того, ищете ли вы ошибку, просматриваете изменения или просто пытаетесь понять, как развивался ваш проект, навыки, которые вы приобретете здесь, будут неоценимы.

Погрузимся в нашу машину времени Git и исследуем прошлое!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/SetupandConfigGroup(["Setup and Config"]) git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/SetupandConfigGroup -.-> git/init("Initialize Repo") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/log("Show Commits") git/BranchManagementGroup -.-> git/shortlog("Condensed Logs") subgraph Lab Skills git/init -.-> lab-387490{{"Управление историей и журналом в Git"}} git/commit -.-> lab-387490{{"Управление историей и журналом в Git"}} git/log -.-> lab-387490{{"Управление историей и журналом в Git"}} git/shortlog -.-> lab-387490{{"Управление историей и журналом в Git"}} end

Настройка рабочего пространства

Прежде чем мы приступим к изучению функций истории в Git, настроим рабочее пространство с некоторой историей коммитов для исследования. Мы создадим новую директорию, инициализируем репозиторий Git и добавим несколько коммитов.

Откройте терминал и введите следующие команды:

cd ~/project
mkdir git-history-lab
cd git-history-lab
git init

Теперь создадим несколько файлов и сделаем серию коммитов, скопировав и вставив следующие команды:

echo "## Git History Lab" > README.md
git add README.md
git commit -m "Initial commit"

echo "function hello() {" > script.js
echo "  console.log('Hello, Git!');" >> script.js
echo "}" >> script.js
git add script.js
git commit -m "Add hello function"

echo "function goodbye() {" >> script.js
echo "  console.log('Goodbye, Git!');" >> script.js
echo "}" >> script.js
git add script.js
git commit -m "Add goodbye function"

echo "This is a test file" > test.txt
git add test.txt
git commit -m "Add test file"

echo "hello();" >> script.js
echo "goodbye();" >> script.js
git add script.js
git commit -m "Call hello and goodbye functions"

Разберем, что мы только что сделали:

  1. Мы создали файл README и сделали первый коммит.
  2. Мы создали JavaScript-файл с функцией "hello" и закоммитили его.
  3. Мы добавили функцию "goodbye" в тот же файл и закоммитили изменения.
  4. Мы добавили тестовый файл и закоммитили его.
  5. Наконец, мы изменили наш скрипт так, чтобы он вызывал обе функции, и закоммитили эти изменения.

Теперь у нас есть репозиторий с некоторой историей для исследования!

Базовое использование журнала

Теперь, когда у нас есть некоторая история коммитов, давайте рассмотрим базовое использование команды git log.

Чтобы увидеть историю коммитов вашего проекта, просто выполните:

git log

Вы должны увидеть вывод, похожий на следующий:

commit 1234567890abcdef1234567890abcdef12345678 (HEAD -> main)
Author: Your Name <your.email@example.com>
Date:   Mon Jun 5 10:00:00 2023 +0000

    Call hello and goodbye functions

commit 2345678901abcdef2345678901abcdef23456789
Author: Your Name <your.email@example.com>
Date:   Mon Jun 5 09:45:00 2023 +0000

    Add test file

...

Каждая запись в журнале показывает:

  • Полный хэш коммита (уникальный идентификатор коммита)
  • Автора коммита
  • Дату и время коммита
  • Сообщение коммита

По умолчанию команда git log показывает все коммиты, начиная с самого последнего. Они отображаются в обратном хронологическом порядке (сначала новые).

Если вывод длинный, Git отобразит его в постраничном просмотрщике (обычно less). Вы можете перемещаться с помощью стрелочек и нажать q, чтобы выйти.

Чтобы увидеть более компактную версию журнала, вы можете использовать:

git log --oneline

Эта команда показывает каждый коммит в одной строке, только с коротким хэшем коммита и сообщением коммита.

Помните, что команда git log — это ваше окно в историю проекта. Это отличная отправная точка для понимания, какие изменения были сделаны, когда и кем.

Форматирование вывода журнала

Git предоставляет мощные опции для форматирования вывода журнала, чтобы показать именно ту информацию, которая вам нужна. Давайте рассмотрим некоторые из этих опций.

Чтобы показать файлы, которые были изменены в каждом коммите, используйте опцию --stat:

git log --stat

Это покажет, какие файлы были изменены в каждом коммите и сколько строк было добавлено или удалено.

Для более детального представления изменений используйте опцию -p:

git log -p

Это показывает фактический патч (строки, которые были добавлены и удалены) для каждого коммита. Это очень полезно для детального просмотра изменений.

Вы также можете создавать пользовательские форматы с помощью опции --pretty. Например:

git log --pretty=format:"%h - %an, %ar : %s"

Это покажет:

  • %h: сокращенный хэш коммита
  • %an: имя автора
  • %ar: дата автора в относительном формате
  • %s: тема (сообщение коммита)

Вы можете настроить эту строку формата так, чтобы она включала любую необходимую вам информацию. Вот некоторые полезные заполнители:

  • %H: полный хэш коммита
  • %ad: дата автора
  • %cn: имя коммиттера
  • %ce: электронная почта коммиттера
  • %cd: дата коммиттера

Попробуйте разные форматы, чтобы найти тот, который лучше всего подходит для вас!

Фильтрация журнала по дате

Часто вам нужно будет посмотреть коммиты, сделанные в определенном временном диапазоне. Git предоставляет несколько опций для фильтрации журнала по дате.

Чтобы увидеть коммиты за последнюю неделю:

git log --since=1.week

Вы также можете использовать конкретные даты:

git log --after="2023-06-01" --before="2023-06-30"

Это покажет коммиты, сделанные между 1 и 30 июня 2023 года.

Git понимает различные форматы дат, включая относительные, такие как "вчера", "1 месяц 2 недели 3 дня назад" и т.д.

Вы также можете использовать опцию --until вместо --before, а --after является синонимом --since.

Помните, что эти фильтры показывают коммиты, дата создания которых попадает в указанный диапазон. Дата коммита - это дата создания коммита, которая может отличаться от даты, когда были сделаны фактические изменения.

Если вы исследуете, когда было внесено определенное изменение, вы можете использовать опцию --grep для поиска конкретных сообщений коммитов, о чем мы поговорим на следующем шаге.

Поиск в журнале конкретных изменений

Git предоставляет мощные возможности поиска, которые помогут вам найти конкретные коммиты. Давайте рассмотрим некоторые из этих функций.

Для поиска коммитов, в сообщении которых есть конкретное слово:

git log --grep="function"

Это покажет все коммиты, в которых слово "function" встречается в сообщении коммита.

Вы также можете искать изменения в конкретном файле:

git log -- script.js

Это показывает все коммиты, которые повлияли на файл script.js.

Для поиска изменений, в которых добавлена или удалена конкретная строка кода:

git log -S "console.log"

Это называется "pickaxe" (кирка) - поиском. Он показывает коммиты, в которых изменилось количество вхождений "console.log".

Вы можете комбинировать эти опции с другими. Например, чтобы увидеть детальные изменения в файле script.js за последнюю неделю:

git log -p --since=1.week -- script.js

Помните, что поиск в Git по умолчанию чувствителен к регистру. Используйте опцию -i для регистронезависимого поиска:

git log --grep="function" -i

Эти возможности поиска невероятно полезны, когда вы пытаетесь выяснить, когда было внесено определенное изменение или исправлена ошибка.

Генерация статистики из журнала

Git может предоставить ценную информацию о истории вашего проекта с помощью статистики. Давайте рассмотрим несколько способов генерации такой статистики.

Чтобы увидеть сводку по количеству коммитов от каждого автора:

git shortlog -s -n

Это покажет список авторов, отсортированных по количеству коммитов, с указанием количества коммитов рядом с каждым именем.

Чтобы узнать, сколько строк добавил и удалил каждый автор:

git log --author="Jane Doe" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "Added lines: %s, Removed lines: %s, Total lines: %s\n", add, subs, loc }'

Замените "Jane Doe" именем автора, информацию о котором вы хотите проверить.

Чтобы увидеть, какие файлы были изменены чаще всего:

git log --pretty=format: --name-only | sort | uniq -c | sort -rg | head -10

Это покажет 10 наиболее часто изменяемых файлов.

Чтобы узнать общее количество коммитов:

git rev-list --count HEAD

Эта статистика может быть очень полезной для понимания общих моделей разработки в вашем проекте. Она может помочь определить, какие части проекта наиболее активно разрабатываются, кто из участников наиболее активен и как проект развивался со временем.

Помните, что хотя эта статистика может быть информативной, она не дает полной картины. Количество коммитов или измененных строк не обязательно коррелирует с воздействием или качеством вклада.

Итоги

Поздравляем, историк Git! Вы только что раскрыли мощь функций управления историей и журналом в Git. Давайте повторим ключевые концепции, которые мы рассмотрели:

  1. Базовое использование журнала: Вы узнали, как просматривать историю коммитов проекта с помощью команды git log.
  2. Форматирование вывода журнала: Вы узнали, как настроить вывод журнала так, чтобы он показывал именно ту информацию, которая вам нужна.
  3. Фильтрация журнала по дате: Вы увидели, как сосредоточиться на коммитах, сделанных в определенных временных диапазонах.
  4. Поиск в журнале конкретных изменений: Вы узнали мощные методы для определения времени внесения конкретных изменений.
  5. Генерация статистики из журнала: Вы исследовали способы извлечения информации о моделях разработки вашего проекта.

Эти навыки окажутся бесценными при работе над более крупными проектами. Независимо от того, ищете ли вы ошибку, рассматриваете эволюцию функции или пытаетесь понять общие тенденции разработки в проекте, команда git log и ее различные опции станут вашими верными помощниками.

Помните, что история в Git - это не просто запись того, что произошло, - это мощный инструмент для понимания и улучшения вашего проекта. Используйте его разумно, и он сделает вас более эффективным разработчиком.

Продолжайте изучать и экспериментировать с этими командами. Чем более уверенно вы будете ориентироваться в истории проекта, тем больше полезной информации вы сможете извлечь из нее. Приятного путешествия по времени в ваших Git - репозиториях!