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

Цілі

  • Зрозуміти, що 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 master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   hello.html
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <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"
[master 8c32287] Added standard HTML page tags
 1 files changed, 3 insertions(+), 1 deletions(-)
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   hello.html
#
no changes added to commit (use "git add" and/or "git commit -a")

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

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

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

Виконайте:

git add .
git status

Примітка: У якості файлу для додавання, ми використовували поточний каталог («.»). Це самий коротший й зручний шлях для додавання всіх змін у файли поточного каталогу й його підкаталогів. Але оскільки git додає все, не зайвим буде перевірити стан перед запуском add, просто щоб впевнетися, що ви не додали якийсь файл, який не треба було додавати.

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

Ви побачите…

Результат:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   hello.html
#

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

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

Виконайте:

git commit -m "Added HTML header"