W3docs

Введение

Краткое описание команд git status, git log, git tag и git blame с примерами основного использования.

git blame

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

Этот раздел руководства охватывает четыре команды, к которым чаще всего обращаются при изучении репозитория, а не при его изменении:

КомандаНа что отвечаетОбласть
git statusЧто изменилось с момента последнего коммита и что подготовлено к коммиту?Рабочий каталог + область подготовки
git logКакова история коммитов?Только зафиксированные снимки
git tagКакие коммиты являются значимыми (например, релизы)?Именованные указатели на коммиты
git blameКто последним изменял каждую строку и в каком коммите?Авторство каждой строки в одном файле

Ниже приведено краткое описание каждой команды с быстрым примером. На следующих страницах подробно рассматривается каждый параметр.

git status

Команда git status отображает состояние рабочего каталога и области подготовки, позволяя видеть, какие изменения подготовлены к следующему коммиту и какие файлы ещё не отслеживаются Git. Она не показывает историю коммитов — только разницу между текущими файлами и последним коммитом.

Запустите её внутри любого репозитория:

$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   index.html

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
        modified:   style.css

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        notes.txt

Здесь index.html подготовлен к коммиту (войдёт в следующий коммит), style.css изменён, но не подготовлен, а notes.txt — совершенно новый и неотслеживаемый файл. Возьмите за привычку запускать git status перед каждым коммитом, чтобы случайно не зафиксировать или не забыть какой-либо файл.

git log

Команда git log исследует зафиксированную историю репозитория и помогает найти конкретную версию проекта. Она перечисляет, фильтрует и ищет коммиты — но работает только с зафиксированной историей, поэтому незафиксированные изменения в ней не появятся.

$ git log --oneline -3
9a3c1f4 (HEAD -> main) Fix navbar alignment on mobile
1d72b08 Add contact form validation
f0e5a91 Initial commit

Флаг --oneline сжимает каждый коммит до короткого хеша и темы. Можно фильтровать по автору (--author), по дате (--since, --until) или по содержимому (-S "searchterm"), чтобы точно определить, когда произошло изменение. Для детального просмотра одного коммита используйте git log вместе с git show.

git tag

Теги — это ссылки, указывающие на конкретные значимые точки в истории Git. Их основное назначение — отметить релиз, например v1.0.0. В отличие от ветки, тег не перемещается при добавлении новых коммитов; после создания он постоянно указывает на один и тот же снимок.

$ git tag v1.0.0          # create a lightweight tag on the current commit
$ git tag                 # list existing tags
v1.0.0
$ git tag -a v1.1.0 -m "Release 1.1.0"   # create an annotated tag with a message

Лёгкий тег — это просто имя для коммита, тогда как аннотированный тег (-a) также хранит имя автора, дату и сообщение — аннотированные теги рекомендуются для релизов. Теги не отправляются автоматически; поделиться ими можно с помощью git push origin v1.0.0 (или git push --tags).

git blame

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

$ git blame -L 1,3 index.html
9a3c1f4a (Jane Doe  2024-03-12 10:22:01 +0000  1) <!DOCTYPE html>
1d72b08c (John Roe  2024-02-28 14:05:33 +0000  2) <html lang="en">
9a3c1f4a (Jane Doe  2024-03-12 10:22:01 +0000  3)   <head>

Флаг -L 1,3 ограничивает вывод строками 1–3. Каждая строка снабжена префиксом в виде короткого хеша коммита, автора и временной метки последнего изменения. Чтобы подробнее изучить один из этих коммитов, скопируйте его хеш в git show или git log.

Изучение vs. изменение

Полезная ментальная модель: эти команды работают в режиме только для чтения. Ни git status, ни git log, ни git tag (при перечислении), ни git blame не изменяют файлы или историю — они только сообщают о состоянии. Это делает их безопасными для запуска в любое время. Когда вы действительно хотите изменить записанное, используйте другие инструменты, например git commit, git checkout или git diff для предварительного просмотра изменений.

Практика

Практика
Какие из следующих утверждений правильно описывают функциональность различных Git-команд для изучения репозитория?
Какие из следующих утверждений правильно описывают функциональность различных Git-команд для изучения репозитория?
Was this page helpful?