8. Зміни, а не файли

Цілі

  • Зрозуміти, що Git працює зі змінами, а не файлами.

Більшість систем по контролю версіями працюють з файлами. Ви додаєте файл у контроль версіями та з цього моменту система відстежує зміни у файлі.

Git фокусується на змінах у файлі, а не на самому файлі. Коли ви виконуєте команду git add file, ви не кажете Git додати файл у репозиторій. Скоріше ви кажете, що Git має помітити поточний стан файлу, коміт якого буде виконано пізніше.

Ми спробуємо дослідити цю різницю в цьому уроці.

01 Перша зміна: Додайте стандартні теги сторінок

Змініть сторінку «Hello, World» так, щоб вона містила стандартні теги <html> й <body>.

Файл: hello.html

<html>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

02 Додайте ці зміни

Тепер додайте ці зміни в індекс Git.

Виконайте

git add hello.html

03 Друга зміна: Додайте заголовок HTML

Тепер додайте заголовок HTML (секцію <head>) до сторінки «Hello, World».

Файл: hello.html

<html>
  <head>
  </head>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

04 Перевірте поточний статус

Виконайте

git status

Ви побачите:

Результат

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

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:   hello.html

Зверніть увагу, що hello.html згадано двічі. Перша зміна (додавання стандартних тегів) проіндексована і готова до коміту. Друга зміна (додавання заголовків HTML) є непроіндексована. Якби ви робили коміт зараз, заголовки не було б збережено у репозиторій.

Давайте це перевіримо.

05 Коміт

Зробіть коміт проіндексованих змін (значення за замовчуванням), а потім ще раз перевірте стан.

Виконайте

git commit -m "Added standard HTML page tags"
git status

Ви побачите:

Результат

$ git commit -m "Added standard HTML page tags"
[main 46afaff] Added standard HTML page tags
 1 file changed, 5 insertions(+), 1 deletion(-)
$ 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:   hello.html

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

Команда status засвідчує, що у файлі hello.html досі є незбережені зміни, але область підготовки вже порожня.

06 Додайте другу зміну

Тепер додайте другу зміну в індекс, потім перевірте стан за допомогою команд git status.

Виконайте

git add .
git status

Ми використали поточну директорію (.) як аргумент для додавання. Це найкоротший і зручний спосіб додавання всіх змін у поточній директорії. Але оскільки Git додає в індекс все, то не зайвим буде перевірити стан репозиторію перед запуском add, просто щоб впевнитися, що ви не додали якийсь файл, що не треба було додавати.

Я просто хотів показати вам трюк з add ., надалі ми будемо додавати усі файли явно.

Ви побачите:

Результат

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

Другу зміну було проіндексовано й приготовлено до коміту.

07 Зробіть коміт другої зміни

Виконайте

git commit -m "Added HTML header"

Результат

$ git commit -m "Added HTML header"
[main b7614c1] Added HTML header
 1 file changed, 2 insertions(+)