✅ Решения заданий

К оглавлению урока

⚡ Ключевые команды решений

# Решение задания 1 (amend)
git init task19 && cd task19
echo "" > index.html
git add index.html && git commit -m "Add page"
echo "" > style.css
git add style.css
git commit --amend -m "Add page and styles"
git show HEAD --name-only

Решение задания 1: git commit --amend

# Инициализация
git init task19
cd task19

# Создаём и коммитим основной файл
echo "<!DOCTYPE html><html></html>" > index.html
git add index.html
git commit -m "Add page"

# Создаём забытый CSS-файл
echo "body { margin: 0; }" > style.css

# Добавляем к последнему коммиту и исправляем сообщение
git add style.css
git commit --amend -m "Add page and styles"

# Проверяем результат
git show HEAD --name-only
# commit abc1234 (HEAD -> main)
# Add page and styles
#
# index.html
# style.css

Решение задания 2: merge и rebase

# Создаём репозиторий
git init compare-demo
cd compare-demo
echo "Init" > README.md
git add README.md && git commit -m "Initial commit"

# Добавляем коммит на main
echo "Main work" >> README.md
git commit -am "Update main"

# Создаём feature ветку
git checkout -b feature-a
echo "Feature A" > feature.txt
git add feature.txt && git commit -m "Feature A: step 1"
echo "More feature" >> feature.txt
git commit -am "Feature A: step 2"

# Параллельно main тоже обновился
git checkout main
echo "Another main update" >> README.md
git commit -am "More main work"

# Вариант 1: MERGE
git merge feature-a
git log --oneline --graph --all
# Видим: merge commit с двумя родителями

# Сбрасываем merge (возвращаемся до него)
git reset --hard HEAD~1

# Вариант 2: REBASE — идём в feature и перебазируем
git checkout feature-a
git rebase main
git log --oneline --all
# Видим: линейная история без merge commit

Решение задания 3: git revert vs git reset

# Создаём три коммита
git init revert-demo
cd revert-demo
echo "A" > a.txt && git add a.txt && git commit -m "Commit A"
echo "B — bad code" > b.txt && git add b.txt && git commit -m "Commit B (buggy)"
echo "C" > c.txt && git add c.txt && git commit -m "Commit C"

# Смотрим историю
git log --oneline
# c123 Commit C
# b456 Commit B (buggy)
# a789 Commit A

# Используем revert для безопасной отмены B
git revert b456

# История теперь:
git log --oneline
# r000 Revert "Commit B (buggy)"
# c123 Commit C
# b456 Commit B (buggy)    ← история сохранена!
# a789 Commit A

# Сравнение: reset --hard удалил бы коммиты C и B безвозвратно:
# git reset --hard a789  ← ОПАСНО, только на локальных ветках!