⚡ Ключевые команды решений
# Решение задания 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 ← ОПАСНО, только на локальных ветках!