Программирование и IT

git commit

Коммит — это сохранённое состояние проекта с автором, временем и сообщением. Команда git commit берёт то, что ты заранее отобрал командой git add, и записывает это в историю одной неделимой порцией.

Обновлено
В этой статье

В коммит попадает индекс, а не папка#

Между твоими файлами и историей есть промежуточный слой — индекс, он же
staging area. Команда git add копирует туда текущее содержимое файла, а
git commit записывает в историю ровно то, что лежит в индексе на момент
запуска. Отсюда неожиданность новичка: если после git add файл поправили
ещё раз, в коммит уйдёт прежняя версия, а новая останется в рабочем
каталоге. git status показывает оба списка отдельно — «Changes to be
committed» и «Changes not staged for commit».

Поэтому порядок такой: посмотреть git status, отобрать нужное git add,
свериться с git diff --staged и только потом коммитить.

Синтаксис#

git add README.md app.py
git commit -m "Первая версия разбора аргументов"
Ключ Что делает
-m "текст" сообщение прямо в команде, без запуска редактора
-a взять все изменения уже отслеживаемых файлов, минуя git add
--amend заменить последний коммит новым вместо создания ещё одного
--no-edit при --amend оставить прежнее сообщение
--allow-empty сделать коммит без изменений (бывает нужно для проверок)
-v показать в редакторе сам diff — удобно перечитать перед записью

Ключ -a не подбирает новые файлы: то, о чём git ещё не знает, придётся
добавить руками. Сообщение пишут в повелительном наклонении и по делу —
первая строка до примерно 50 знаков, подробности через пустую строку.

Пример: первый коммит в новом репозитории#

git init
git add README.md
git commit -m "Описание проекта"
[main (root-commit) 4f1c2ab] Описание проекта
 1 file changed, 12 insertions(+)
 create mode 100644 README.md

В скобках — ветка и сокращённый хеш. У самого первого коммита рядом стоит
пометка root-commit: у него нет родителя.

Пример: поправить только что сделанный коммит#

Забыли файл или опечатались в сообщении — не нужен ещё один коммит
«исправление опечатки»:

git add tests/test_args.py
git commit --amend --no-edit
[main 9d31c07] Первая версия разбора аргументов
 Date: Sat Sep 20 11:04:18 2026 +0300
 2 files changed, 41 insertions(+)

Хеш изменился — это другой коммит, старый просто перестал быть нужен.
Отсюда правило: --amend безопасен, пока коммит не уехал на сервер. Что
делать, если уже уехал, разобрано в статье про
git push.

На что жалуется git#

nothing to commit, working tree clean — в индексе пусто и менять нечего.
Обычно забыт git add.

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

nothing added to commit but untracked files present

Файл новый, git за ним не следит. Либо добавь его, либо внеси шаблон в
файл .gitignore, если он попал в папку случайно.

Please tell me who you are — не заполнены имя и почта. Лечится один раз
на машину:

git config --global user.name "Иван Петров"
git config --global user.email "ivan@example.com"

Aborting commit due to empty commit message — редактор закрыли, ничего не
написав. Git сознательно отказывается записывать коммит без сообщения.

Как отменить коммит#

Всё зависит от того, ушёл ли он на сервер.

git reset --soft HEAD~1

Снимает последний коммит, но оставляет изменения в индексе — можно тут же
закоммитить заново. Вариант --mixed (он же по умолчанию) вернёт правки в
рабочий каталог, а --hard сотрёт их вместе с коммитом, и это единственный
по-настоящему опасный из трёх.

git revert 9d31c07

Создаёт новый коммит, отменяющий указанный. Историю не переписывает,
поэтому годится для того, что уже видели коллеги.

Если запутался и кажется, что работа потеряна, посмотри git reflog:
там перечислены все состояния HEAD за последние недели, и почти любой
«пропавший» коммит находится там по хешу.

План по этапам

  1. Посмотреть, что изменилосьgit status и git diff: сначала понять, из чего собирать коммит.
  2. Отобрать в индексgit add по файлам; проверить выбор командой git diff --staged.
  3. Записать с сообщениемgit commit -m с осмысленной первой строкой до 50 знаков.
  4. Свериться с историейgit log --oneline -3: коммит на месте, ветка сдвинулась.
  5. Поправить при необходимостиПока коммит не отправлен — git commit --amend; после отправки — git revert.

Начать изучать эту тему у себя

План ляжет в твой репозиторий: отмечай этапы, веди конспект — история изменений покажет, как ты продвинулся.

Начать план

Проверь себя

1.Какая команда закоммитит изменения всех отслеживаемых файлов без отдельного git add?

2.Коммит сделан, но не отправлен; нужно убрать его, сохранив правки в файлах. Что выбрать?

3.Что делает git commit --amend?

Источники

Было полезно?

Ещё темы

Программирование и IT git merge Слияние переносит работу из одной ветки в другую. Команда git merge берёт указанную ветку и соединяет её историю с текущей — иногда просто сдвигая указатель, иногда создавая отдельный коммит, а иногда останавливаясь и прося помощи. Программирование и IT git push Пока ты не выполнил git push, твои коммиты существуют только на твоём диске. Команда отправляет их в удалённый репозиторий и сдвигает там указатель ветки — поэтому она же чаще всего и отказывает, если кто-то успел отправить своё раньше. Программирование и IT git clone Команда git clone забирает репозиторий с сервера целиком — со всей историей, ветками и тегами — и кладёт копию в новую папку на твоём компьютере. С неё начинается работа с любым уже существующим проектом, своим или чужим. Программирование и IT Как отменить коммит Вопрос «как отменить коммит» на деле скрывает четыре разных: поправить последний, снять его и переделать, стереть несколько, отменить давний коммит в середине истории. Решение зависит в первую очередь от одного обстоятельства — видел ли этот коммит кто-нибудь, кроме тебя. Программирование и IT Как создать репозиторий с нуля Репозиторий — это папка проекта плюс скрытая папка `.git`, в которой хранится вся история. Создаётся одной командой, но между ней и первым осмысленным коммитом есть несколько шагов, которые потом трудно переделать: имя ветки, список игнорируемых файлов, привязка к серверу. Программирование и IT git stash Заначка — временная полка для незаконченных правок. Ты кладёшь туда всё, что наработал, получаешь чистую рабочую копию, делаешь срочное дело и возвращаешь отложенное обратно. Полка общая на весь репозиторий и устроена как стопка: последнее положенное лежит сверху.

Ещё сценарии