А теперь разберем, из чего состоит коммит.
commit 087b541c6ce7d06b7af70f831dcc434e06c8743b (HEAD -> master)
Author: Muhammad Imangazaliev <[email protected]>
Date: Mon Apr 11 23:07:58 2022 +0300
Первый коммит
087b541c6ce7d06b7af70f831dcc434e06c8743b
- это т. н. хеш коммита. Хеш коммита - это строка, которая является уникальным идентификатором коммита. Хеш коммита используется для указания на него при выполнении различных операция.Muhammad Imangazaliev
- имя автора коммита[email protected]
- Email автораMon Apr 11 23:07:58 2022 +0300
- дата создания коммита (с указанием часового пояса)Первый коммит
- сообщение к коммиту. Обычно в нем описывается, какие изменения были сделаны в этом коммите.
Мы можем посмотреть, какие изменения мы сделали в коммите с помощью команды git show
:
commit 087b541c6ce7d06b7af70f831dcc434e06c8743b (HEAD -> master)
Author: Muhammad Imangazaliev <[email protected]>
Date: Mon Apr 11 23:07:58 2022 +0300
Первый коммит
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..3318f19
--- /dev/null
+++ b/index.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+ <html>
+ <head>
+ <title>Список дел</title>
...
Данная команда показывает, какие файлы были добавлены, изменены, удалены и т. д. Для текстовых файлов будет показано, что именно было изменено, для бинарных файлов - только их названия. Под текстовыми файлами имеются в виду файл, содержащий текст, независимо от расширения, будь то .txt
, .html
, .php
и т. д., либо вообще без расширения. Более подробно вывод это команды мы разберем в одной из следующих глав.
Для навигации вверх и вниз используйте стрелки, для выхода нажмите кнопку q
(quit). Можно также использовать кнопки Page Up
, Page Down
, Home
и End
, как в текстовых редакторах.
Давайте внесем несколько изменений в наши файлы: изменим заголовок страницы в файле index.html
, основной цвет в файле styles.css
, после чего посмотрим состояние репозитория:
На ветке master
Изменения, которые не в индексе для коммита:
(используйте «git add <файл>…», чтобы добавить файл в индекс)
(используйте «git restore <файл>…», чтобы отменить изменения в рабочем каталоге)
изменено: index.html
изменено: styles.css
нет изменений добавленных для коммита
(используйте «git add» и/или «git commit -a»)
Полезная привычка, которую стоит взять на вооружение - смотреть состояние репозитория перед тем, как выполнять какие-либо действия.
Git говорит нам, что мы изменили два файла. Как теперь посмотреть, что именно было изменено? Для этого есть команда git diff
(difference - различие):
diff --git a/index.html b/index.html
index 3318f19..31396d8 100644
--- a/index.html
+++ b/index.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
- <title>Список дел</title>
+ <title>Список дел - ToDo List</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
diff --git a/styles.css b/styles.css
index 448e7cc..0924a49 100644
--- a/styles.css
+++ b/styles.css
@@ -11,7 +11,7 @@ body {
}
:root {
- --primary: #db4c3f;
+ --primary: #2196f3;
}
[data-template] {
Данная комманда показывает разницу между текущим состоянием репозитория и последним коммитом (последним зафиксированным состоянием).
Эти изменения мы разобьем на два коммита, т. к. это независимые изменения. В первом коммите мы зафиксируем изменение заголовка, а во втором - изменение цвета.
# добавляем index.html в индекс
git add index.html
# создаем коммит, индекс очищается
git commit -m "Изменил заголовок страницы"
# добавляем index.css в индекс
git add styles.css
# создаем еще один коммит
git commit -m "Изменил основной цвет"
Сообщения к коммиту обычно пишут от первого лица в прошедшем времени, но ничто не мешает написать “Изменен заголовок страницы” или “Изменен основной цвет”. Если сообщение на английском, то его обычно пишут, либо в прошедшем времени (”Changed the page title”), либо в повелительном наклонении (”Change the page title”).
Смотрим статус:
На ветке master
нечего коммитить, нет изменений в рабочем каталоге
Теперь в репозитории три коммита. Смотрим историю изменений:
commit 4e7fc64cd4b9d10d140b2e2a1e7fb43aeb809457 (HEAD -> master)
Author: Muhammad Imangazaliev <[email protected]>
Date: Tue Apr 12 05:55:22 2022 +0300
Изменил основной цвет
commit 751eaa603bee76e106019bf5454e88ab352011a6
Author: Muhammad Imangazaliev <[email protected]>
Date: Tue Apr 12 05:55:13 2022 +0300
Изменил заголовок страницы
commit 087b541c6ce7d06b7af70f831dcc434e06c8743b
Author: Muhammad Imangazaliev <[email protected]>
Date: Mon Apr 11 23:07:58 2022 +0300
Первый коммит
Коммиты идут снизу вверх, наверху находится самый последний коммит.
У команды git log
есть флаг --oneline
, который позволяет вывести историю изменений в краткой форме: только хеш и сообщение к коммиту.
git log --oneline
4e7fc64 (HEAD -> master) Изменил основной цвет
751eaa6 Изменил заголовок страницы
087b541 Первый коммит
Краткий хеш можно использовать так же, как и полный, но работать с ним намного удобнее.
Чуть выше мы использовали команду git show
, чтобы посмотреть изменения в первом сделанном нами коммите. На самом деле эта команда показывает изменения показывает изменения в последнем коммите, но т. к. он был у нас всего один, он и был показан. Но что, если мы хотим сейчас посмотреть изменения в первом, либо во втором коммитах? Для этого необходимо необходимо указать хеш коммита (полный или короткий):
git show 751eaa6
commit 751eaa603bee76e106019bf5454e88ab352011a6
Author: Muhammad Imangazaliev <[email protected]>
Date: Tue Apr 12 05:55:13 2022 +0300
Изменил заголовок страницы
diff --git a/index.html b/index.html
index 3318f19..31396d8 100644
--- a/index.html
+++ b/index.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
- <title>Список дел</title>
+ <title>Список дел - ToDo List</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
Кроме создания нового коммита, команда git commit
позволяет изменить последний коммит с помощью флага --amend
. Это может быть полезно, если вы ошиблись при написании сообщении к коммиту, либо хотите дополнить изменения в файлах.
Чтобы добавить изменения в последний коммит, их нужно сначала добавить в индекс, как при обычном коммите.
Просто изменяем сообщение к коммиту:
git commit --amend -m "Новое сообщение"
Добавляем текущие изменения в последний коммит вместо создания нового и изменяем сообщения:
git add -A
git commit --amend -m "Новое сообщение"
Добавляем текущие изменения в последний коммит без изменения сообщения:
git commit --amend --no-edit
Флаг --no-edit
указывает, что не нужно изменять сообщение последнего коммита, нужно просто добавить в него изменения в файлах.
После выполнения команды проверьте историю изменений с помощью команды git log
и содержимое самого коммита с помощью команды git show
. Обратите внимание, что хеш коммита изменился. Почему так произошло, можно понять, прочитав в конце урока о том, как этот хеш формируется.
Что, если мы по ошибке добавили какой-либо файл в индекс? Убрать файл их индекса (т. е. отменить действие команды git add
) можно с помощью команды git reset
:
git add index.html
git add styles.css
git add script.js
# отменяем добавление
git reset index.html
# можно укзаать несколько файлов
git reset index.html script.js
В данном примере в индексе останется только файл styles.css
.
Можно вообще очистить индекс целиком, если вызвать git reset
без параметров:
# убираем все файлы из индекса
git reset
Чтобы отменить создание коммита, можно воспользоваться командой git reset
с параметром HEAD~
:
git reset HEAD~
При этом изменения, которые были сделаны в коммите, не пропадут, просто исчезнет сам коммит (фиксация изменения). Можно, к примеру, создать новый коммит с этими изменениями. Что означает HEAD~
мы разберем в дальнейшем.
Разберем на примере.
- Измените один или несколько файлов в репозитории.
- Проверьте изменения (
git diff
). - Добавьте изменения в индекс (
git add .
). - Снова проверьте изменения.
После добавления в индекс изменения не будут отображаться. Почему? Потому что команда git diff
сравнивает текущее состояние (структуру и содержимое файлов) сначала с индексом, а если там ничего нет, то с последним коммитом.
Когда мы смотрели дифф в первый раз, индекс был пуст, поэтому изменения сравнивались с последним коммитом. Когда же мы добавили файл в индекс, текущее состояние файлов и состояние в индексе равны, поэтому дифф пуст.
При это есть возможность разницу между индексом и последним коммитом с помощью флага --staged
:
git diff --staged
Попробуйте выполнить ее и вы увидите то же самое, что видели при выполнении git diff
до добавления файлов в индекс. Напомню, что индекс по-английски называется staging area, отсюда, собственно и название флага.
- Изменить сообщение к произвольному коммиту
- Изменить порядок коммитов
- Объединить несколько коммитов в один
- Удалить коммит
- И много другое, что мы разберем в следующих главах.
Хеш коммита генерируеся на основе следующих параметров:
- Сообщения к коммиту
- Имя и Email автора коммита
- Имя и Email создателя коммита. Обычно они совпадают с именем и Email автора, можно пока не обращать внимания, но упомянуть это необходимо.
- Изменения в файлах
- Времея коммита
- Структура файлов в репозитории
- Хеш предыдущего коммита
При изменении любого их этих параметров, хеш пересчитывается, именно поэтому при изменении коммита (его содержимого или сообщения), либо их порядка, изменяется и хеш.
- Создайте несколько коммитов в вашем репозитории.
- Попробуйте использовать все три варианта изменения коммита.
- Отмените последний коммит.
← Фиксация изменений. Первый коммит | Отслеживаемые и неотслеживаемые файлы →