Урок 3. Первый репозиторий: init, status, add, commit
В этом уроке появится первый репозиторий с двумя коммитами. Понадобятся терминал (в 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 — пометка самого первого коммита.
$ git status
On branch main
nothing to commit, working tree cleanworking 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.
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.
Короткий вид — по строке на коммит:
$ git log --oneline
3e677f8 (HEAD -> main) Добавлен первый пункт
5e634b3 Первый коммит: список делКак писать сообщения коммитов
Сообщение читают через месяц — вы сами или коллеги, — когда ищут, где сломалось. Хорошее сообщение коротко говорит, что сделано: «Исправлен расчёт скидки для пустой корзины», «Добавлена страница входа». Плохие — «правки», «исправил», «asdf»: по ним ничего не найти.
Один коммит — одно законченное дело. Если за день сделано три разных вещи, лучше три коммита: тогда любую из них можно отменить отдельно.
Частые ошибки
fatal: not a git repository— команда набрана не в папке репозитория. Перейдите в неё командойcd(подробнее — в справке fatal: not a git repository).Author identity unknown— не заданы имя и почта, решение — в справке Please tell me who you are.nothing added to commit— перед коммитом забылиgit add.- Пустая папка не попадает в коммит: Git следит за файлами, а не за папками. Положите в неё хотя бы один файл.
Коротко
git init— сделать текущую папку репозиторием (появится скрытая.git).git status— что изменилось и что делать дальше; вызывайте её часто.git add файлилиgit add .— добавить изменения в индекс.git commit -m "сообщение"— сохранить индекс в историю.git logиgit log --oneline— история, выход из просмотра —q.