-
1. Вступ
- 1.1 Про систему контролю версій
- 1.2 Коротка історія Git
- 1.3 Основи Git
- 1.4 Git, зазвичай, тільки додає дані
- 1.5 Три стани
- 1.6 Командний рядок
- 1.7 Інсталяція Git
- 1.8 Початкове налаштування Git
- 1.9 Отримання допомоги
- 1.10 Підсумок
-
2. Основи Git
- 2.1 Створення Git-репозиторія
- 2.2 Запис змін до репозиторія
- 2.3 Перегляд історії комітів
- 2.4 Скасування речей
- 2.5 Взаємодія з віддаленими сховищами
- 2.6 Теґування
- 2.7 Псевдоніми Git
- 2.8 Підсумок
-
3. Галуження в git
- 3.1 Гілки у кількох словах
- 3.2 Основи галуження та зливання
- 3.3 Управління гілками
- 3.4 Процеси роботи з гілками
- 3.5 Віддалені гілки
- 3.6 Перебазовування
- 3.7 Підсумок
-
4. Git на сервері
- 4.1 Протоколи
- 4.2 Отримання Git на сервері
- 4.3 Генерація вашого публічного ключа SSH
- 4.4 Налаштування Серверу
- 4.5 Демон Git
- 4.6 Розумний HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Варіанти стороннього хостингу
- 4.10 Підсумок
-
5. Розподілений Git
-
6. GitHub
-
7. Інструменти Git
- 7.1 Вибір ревізій
- 7.2 Інтерактивне індексування
- 7.3 Ховання та чищення
- 7.4 Підписання праці
- 7.5 Пошук
- 7.6 Переписування історії
- 7.7 Усвідомлення скидання (reset)
- 7.8 Складне злиття
- 7.9 Rerere
- 7.10 Зневадження з Git
- 7.11 Підмодулі
- 7.12 Пакування
- 7.13 Заміна
- 7.14 Збереження посвідчення (credential)
- 7.15 Підсумок
-
8. Налаштування Git
-
9. Git and Other Systems
- 9.1 Git як клієнт
- 9.2 Міграція на Git
- 9.3 Підсумок
-
10. Git зсередини
- 10.1 Кухонні та парадні команди
- 10.2 Об’єкти Git
- 10.3 Посилання Git
- 10.4 Файли пакунки
- 10.5 Специфікація посилань (refspec)
- 10.6 Протоколи передачі
- 10.7 Супроводження та відновлення даних
- 10.8 Змінні середовища
- 10.9 Підсумок
-
A1. Додаток A: Git в інших середовищах
- A1.1 Графічні інтерфейси
- A1.2 Git у Visual Studio
- A1.3 Git в Eclipse
- A1.4 Git у Bash
- A1.5 Git у Zsh
- A1.6 Git у Powershell
- A1.7 Підсумок
-
A2. Додаток B: Вбудовування Git у ваші застосунки
- A2.1 Git з командного рядка
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
-
A3. Додаток C: Команди Git
- A3.1 Налаштування та конфігурація
- A3.2 Отримання та створення проектів
- A3.3 Базове збереження відбитків
- A3.4 Галуження та зливання
- A3.5 Поширення й оновлення проектів
- A3.6 Огляд та порівняння
- A3.7 Зневаджування
- A3.8 Латання (patching)
- A3.9 Електронна пошта
- A3.10 Зовнішні системи
- A3.11 Адміністрування
- A3.12 Кухонні команди
2.4 Основи Git - Скасування речей
Скасування речей
У будь-який момент, ви можете забажати щось скасувати. Тут, ми розглянемо декілька базових утиліт для скасування змін, що ви зробили. Будьте обережними, адже ви не завжди в змозі скасувати деякі з цих скасувань. Це одна з не багатьох ділянок, де Git може втратити вашу працю, якщо ви помилитесь.
Одне з розповсюджених скасувань відбувається, коли ви зробили коміт зарано, можливо забули додати деякі файли, або ви зіпсували повідомлення коміту.
Якщо ви хочете переробити цей коміт, внести до нього додаткові зміни, що про них ви забули, то проіндексуйте їх та створіть коміт наново за допомогою опції --amend
:
$ git commit --amend
Ця команда бере ваш індекс та використовує його для коміту. Якщо ви нічого не змінили з останнього коміту (наприклад, ви виконуєте цю команду відразу після попереднього коміту), то ваш знімок буди виглядати так само, та все що ви можете зробити — це змінити повідомлення коміту.
З’явиться вже знайомий редактор повідомлення коміту, проте в ньому вже міститься повідомлення вашого попереднього коміту. Ви можете відредагувати повідомлення як завжди, тільки воно перепише ваш попередній коміт.
Наприклад, якщо ви зробили коміт, а потім збагнули, що забули додати якісь зміни у файлі, які мають потрапити до цього коміту, ви можете зробити так:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
У підсумку ви отримаєте єдиний коміт — другий коміт замінить результати першого.
Зауваження
|
Важливо розуміти, що під час виправлення останнього коміту ви не змінюєте його,а замінюєте на цілковито новий, поліпшений коміт — прибираєте з дороги старий коміт та ставите на його місце новий. У результаті, попередній коміт ніби ніколи не існував, і його не буде видно в історії сховища. Очевидно, виправлення комітів дає можливість робити дрібні поліпшення останнього коміту й не засмічувати історію сховища повідомленнями комітів на кшталт “Йой, забув додати файл” чи “Дідько, виправив одрук в останньому коміті”. |
Вилучання файла з індексу
Наступні дві секції покажуть, що робити зі зміни в індексі та робочій теці.
Гарно те, що команда, яку ви використовуєте для визначення статусу цих двох областей, також нагадує вам, як скасувати зміни в них.
Наприклад, припустімо, що ви змінили два файли та хочете зберегти їх у двох окремих змінах, проте випадково набрали git add *
та проіндексували їх обох.
Як ви можете вилучити один з них?
Команда git status
нагадує вам:
$ git add *
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
modified: CONTRIBUTING.md
Прямо під текстом “Changes to be committed” (зміни, що буде збережено), написано "use git reset HEAD <file>...
to unstage" (скористайтесь git reset HEAD <file>...
щоб вилучити)
Отже, скористаймося цією порадою, щоб вилучити файл CONTRIBUTING.md
:
$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
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: CONTRIBUTING.md
Команда трохи дивна, проте працює.
Файл CONTRIBUTING.md
змінений але неіндексований.
Зауваження
|
Команда |
Поки що цей магічний виклик це все, що вам треба знати про команду git reset
.
Ми розповімо набагато докладніше про reset
та як його використовувати щоб робити дійсно цікаві речі у Усвідомлення скидання (reset).
Скасування змін у зміненому файлі
Раптом ви вирішили, що всі зміни до файлу CONTRIBUTIG.md
— зайві?
Як їх легко скасувати — повернути файл до стану, в якому він був під час вашого останнього коміту (або не вашого, байдуже як ви його отримали)?
На щастя, git status
розповідає вам і про це.
У виводі останнього прикладу, неіндексована область виглядає так:
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: CONTRIBUTING.md
Тут чітко розповідають, як скасувати ваші зміни. (третій рядок перекладається (використайте "git checkout -- <file>..." щоб скасувати зміни у вашій робочій директорії)
)
Так і зробимо:
$ git checkout -- CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Як ви бачите, ваших змін більше нема.
Важливо
|
Памʼятайте, команда |
Якщо ви бажаєте зберегти зроблені зміни до файлу, проте вам необхідно їх тимчасово прибрати, ми розповімо про ховання та гілки в Галуження в git; це зазвичай кращі засоби.
Пам’ятайте, все збережене в комітах Git майже завжди може бути відновлено.
Навіть коміти у видалених гілках чи коміти, переписані за допомогою --amend
, можуть бути відновлені (дивіться Відновлення даних задля відновлення даних).
Однак, будь-що втрачене до коміту ви навряд чи колись ще раз побачите.