IT Academy
Справочник курса

Git без страха: история и командная работа

Все объяснения, задачи и лабораторная в одном месте.

Можно сохранить страницу в PDF через печать браузера. Для печати разборы ответов раскрываются автоматически.

1. Репозиторий, индекс и коммит

Объяснение

Рабочее дерево содержит текущие файлы, индекс — следующий снимок, commit — сохранённый снимок с родителями. git diff показывает неиндексированные изменения, git diff --staged — подготовленные к commit.

Задача для самостоятельного решения

Изменили файл, выполнили add, затем снова изменили. Что войдёт в commit?

Показать разбор ответа

Версия на момент add. Последующая правка останется в рабочем дереве, пока её отдельно не добавить. Сверьте оба diff перед commit.

2. Ветки как указатели

Объяснение

Ветка — изменяемая ссылка на commit, HEAD показывает текущую позицию. Fast-forward передвигает указатель, если история линейна; merge объединяет разошедшиеся ветви. Создание ветки не копирует все файлы заново.

Задача для самостоятельного решения

Почему merge иногда не создаёт отдельный commit?

Показать разбор ответа

Когда целевая ветвь является предком исходной, достаточно fast-forward. Если нужна явная точка объединения, политика команды может требовать merge commit.

3. Конфликт без паники

Объяснение

Конфликт означает, что Git не смог автоматически совместить изменения. Маркеры показывают альтернативы, но правильный результат может включать обе. После редактирования нужно проверить поведение и подготовить разрешённый файл.

Задача для самостоятельного решения

Две ветви изменили разные части одной функции. Можно ли выбрать ours целиком?

Показать разбор ответа

Это может потерять нужное изменение другой ветви. Восстановите намерение обеих правок, удалите маркеры, выполните тест и git add.

4. Откат и безопасная история

Объяснение

revert создаёт новый commit с обратным изменением и подходит для опубликованной истории. reset передвигает локальные указатели и в некоторых режимах меняет файлы. reflog хранит локальные перемещения ссылок ограниченное время.

Задача для самостоятельного решения

Как отменить опубликованный commit, сохранив историю команды?

Показать разбор ответа

git revert <commit>, затем проверить результат и отправить новый commit. Для merge нужны дополнительные решения о родителе, поэтому не применяйте команду вслепую.

Практика

Лабораторная работа

Подготовка

Установленный Git. Все команды выполняйте в новом учебном каталоге, не в рабочем репозитории.

Учебный пример

mkdir git-lab
cd git-lab
git init
git config user.name "Student"
git config user.email "student@example.test"
printf 'version one
' > notes.txt
git add notes.txt
git commit -m "Add initial notes"
git switch -c lesson
printf 'version two
' >> notes.txt
git diff
git add notes.txt
git diff --staged
git commit -m "Extend notes"
git log --oneline --graph --all

Как работает пример и что ожидать

После первого commit история содержит исходный снимок. Ветка lesson указывает на второй commit и наследует первый. git diff до add показывает новую строку, после add эта строка появляется в diff --staged. Команды не требуют удалённого сервера и выполняют весь опыт локально.

Итоговая работа

Создайте две ветви от общего commit, измените одну строку по-разному, воспроизведите merge conflict и объедините смысл правок. Затем отмените один commit через revert. Приложите граф истории и пояснение, какие изменения находятся в рабочем дереве, индексе и истории.

Проверка результата

1. Опишите исходные данные и условия запуска, чтобы другой человек мог повторить работу.
2. Приложите результат обычного сценария и сравните его с ожидаемым.
3. Проверьте неверный вход, граничный случай и отказ зависимости, если она есть.
4. Объясните выбранное решение и известное ограничение.
5. Сохраните исправления после самопроверки вместе с примером, который раньше не работал.

Как оценить работу

По каждому пункту поставьте 0 (не выполнено), 1 (выполнено с пробелами) или 2 (результат воспроизводим и объяснён). Если обязательный сценарий не работает, вернитесь к нему независимо от общей суммы. Это рубрика самопроверки: сайт не исполняет присланный код и не выдаёт автоматическую оценку проекта.

Дополнительная самопроверка

Проверка: Git без страха: история и командная работа →