Глиф Учебники

Урок 3. Первый репозиторий: init, status, add, commit

Курс «Git» · урок 3 из 9 · 4 минуты чтения

В этом уроке появится первый репозиторий с двумя коммитами. Понадобятся терминал (в Windows — Git Bash) и настроенные имя и почта из прошлого урока.

Шаг 1. Создайте репозиторий

Создайте папку для проекта, перейдите в неё и превратите в репозиторий:

Терминал
$ mkdir todo
$ cd todo
$ git init
Initialized empty Git repository in /home/ivan/todo/.git/

git init создаёт скрытую папку .git — в ней будет храниться история. Больше ничего не меняется: ваши файлы остаются на месте. В Windows путь будет вида C:/Users/ivan/todo/.git/.

Не запускайте git init в домашней папке или на целом диске: Git начнёт следить за всеми файлами в них, а git status будет показывать тысячи чужих файлов. Репозиторий — это папка одного проекта. Если ошиблись, удалите созданную папку .git в этом месте — сами файлы при этом не пострадают.

Шаг 2. Спросите, что происходит

Команда git status — главная в Git: она показывает, что изменилось и что делать дальше. Привыкайте вызывать её перед каждым действием.

Терминал
$ git status
On branch main

No commits yet

nothing to commit (create/copy files and use "git add" to track)

Ветка main, коммитов пока нет, сохранять нечего. Создайте файл — в редакторе или командой:

Терминал
$ echo "# Список дел" > README.md
$ git status
On branch main

No commits yet

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

nothing added to commit but untracked files present (use "git add" to track)

Untracked files — неотслеживаемые файлы: Git видит их в папке, но в историю они ещё не входят.

Шаг 3. Добавьте файл в индекс

Терминал
$ git add README.md
$ git status
On branch main

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file:   README.md

Теперь файл в индексе — в разделе Changes to be committed, то есть «попадёт в следующий коммит». Добавить сразу все изменения в текущей папке и её подпапках — git add . (точка — текущая папка).

Шаг 4. Сделайте коммит

Терминал
$ git commit -m "Первый коммит: список дел"
[main (root-commit) 5e634b3] Первый коммит: список дел
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

Ключ -m задаёт сообщение коммита. Без него Git откроет редактор, чтобы вы написали сообщение там. В ответе — ветка, начало хеша нового коммита (5e634b3), сообщение и сколько строк изменилось. root-commit — пометка самого первого коммита.

[ main (root-commit) 5e634b3 ] Первый коммит: список дел ветка начало хеша самый первый коммит сообщение из ключа -m 1 file changed, 1 insertion(+) сколько изменилось
В ответе git commit видны ветка main, пометка самого первого коммита root-commit, начало хеша 5e634b3, сообщение и сколько файлов и строк изменилось.
Терминал
$ git status
On branch main
nothing to commit, working tree clean

working tree clean — в рабочей папке нет ничего, что не сохранено в истории.

Шаг 5. Измените файл и сделайте второй коммит

Допишите в файл строку и посмотрите на состояние:

Терминал
$ echo "- купить хлеб" >> README.md
$ git status
On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

Changes not staged for commit — файл изменён, но в индекс эти изменения ещё не добавлены. Цикл всегда один и тот же: изменить → git add → git commit.

Untracked files новый файл — в историю не входит git add Changes to be committed в индексе — войдёт в коммит git commit nothing to commit, working tree clean всё сохранено в истории изменить файл Changes not staged for commit изменён, но не в индексе git add
Новый файл из Untracked files и изменённый из Changes not staged for commit попадают в индекс командой git add, коммит сохраняет их в историю, а новая правка снова делает файл изменённым.
Bash
git add README.md
git commit -m "Добавлен первый пункт"

git commit -am "сообщение" добавляет в индекс и сохраняет все изменённые файлы одной командой. Но только те, что уже есть в истории: новые файлы -a не берёт, их сначала добавляют через git add.

Шаг 6. Посмотрите историю

Терминал
$ git log
commit 3e677f89be64b50549cba314384e0f14e6770322 (HEAD -> main)
Author: Ivan Petrov <ivan@example.com>
Date:   Thu Nov 5 10:15:42 2026 +0300

    Добавлен первый пункт

commit 5e634b3ed09d78b69c446eb6c8da0422b7fe37fc
Author: Ivan Petrov <ivan@example.com>
Date:   Thu Nov 5 10:12:03 2026 +0300

    Первый коммит: список дел

Новые коммиты — сверху. HEAD -> main значит, что вы сейчас на ветке main и это её последний коммит. Если история длинная, Git показывает её постранично: листать — пробел и стрелки, выйти — клавиша q.

HEAD main 3e677f8 Добавлен первый пункт последний коммит ветки main 5e634b3 Первый коммит: список дел самый первый коммит новые старые вы на ветке main
В git log новые коммиты сверху: HEAD указывает на ветку main, а main — на её последний коммит 3e677f8, под ним самый первый коммит 5e634b3.

Короткий вид — по строке на коммит:

Терминал
$ git log --oneline
3e677f8 (HEAD -> main) Добавлен первый пункт
5e634b3 Первый коммит: список дел

Как писать сообщения коммитов

Сообщение читают через месяц — вы сами или коллеги, — когда ищут, где сломалось. Хорошее сообщение коротко говорит, что сделано: «Исправлен расчёт скидки для пустой корзины», «Добавлена страница входа». Плохие — «правки», «исправил», «asdf»: по ним ничего не найти.

Один коммит — одно законченное дело. Если за день сделано три разных вещи, лучше три коммита: тогда любую из них можно отменить отдельно.

Частые ошибки

Коротко

Проверьте себя

1. Что делает команда git init?
2. Что значит Untracked files в выводе git status?
3. Какой порядок действий сохраняет изменённый файл в истории?
4. Почему git commit -am "…" не сохранил новый файл?
5. Как выйти из постраничного просмотра git log?