feat: новый раздел Шпаргалки. новая статья Git Workflow для Hugo блога

This commit is contained in:
2026-02-23 10:46:08 +00:00
parent 9e9fcf1721
commit 4c36dd4ade
82 changed files with 15316 additions and 2783 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

+398
View File
@@ -0,0 +1,398 @@
---
title: "Git Workflow для Hugo блога"
date: 2026-02-23
draft: false
description: "Универсальная шпаргалка по работе с Hugo блогом через Git с двумя окружениями. Префиксы коммитов, откаты, типичные ошибки и решения."
tags: ["git", "workflow", "hugo", "cheatsheet"]
categories: ["Шпаргалки"]
showComments: true
---
## Структура проекта
```
~/projects/blog/ ← одна папка, две ветки
├── main ← production (blog.ru)
└── dev ← development (dev.blog.ru)
```
**Принцип:** Одна папка, две ветки. Переключение через `git checkout`, не через разные директории.
---
## Золотые правила
**ВСЕ изменения только через dev**
✅ В main попадает только через `git merge dev`
✅ Никогда не редактировать находясь на main
✅ Всегда `git pull` перед началом работы
✅ Проверяй на dev окружении перед публикацией
❌ Не редактировать на ветке main
❌ Не делать `git push --force` в main
❌ Не забывать `git pull` перед merge
---
## Префиксы для commit сообщений
### Основные
**feat:** - новая функциональность
```bash
feat: новая статья про Kubernetes
feat: добавил комментарии
```
**fix:** - исправление ошибки
```bash
fix: опечатка в статье
fix: сломанная ссылка
```
**style:** - форматирование, стили
```bash
style: настроил CSS для тёмной темы
style: исправил отступы
```
**docs:** - изменения в документации
```bash
docs: обновил README
```
**refactor:** - рефакторинг без изменения функций
```bash
refactor: упростил структуру конфигов
```
**chore:** - рутинные задачи
```bash
chore: обновил зависимости
chore: удалил старые файлы
```
**revert:** - откат коммита
```bash
revert: "feat: добавил комментарии"
```
### Дополнительные
**perf:** - улучшение производительности
**test:** - тесты
**build:** - изменения сборки
**ci:** - изменения CI/CD
---
## Создание новой статьи
```bash
cd ~/projects/blog
# Переключаемся на dev
git checkout dev
git pull origin dev
# Создаём статью
hugo new content posts/название-статьи/index.md
# Локальный предпросмотр
hugo server -D --bind 0.0.0.0
# Редактируем, сохраняем, проверяем в браузере
# Коммитим
git add .
git commit -m "feat: новая статья про X"
git push origin dev
# → Автосборка → dev.blog.ru
```
---
## Публикация в production
```bash
cd ~/projects/blog
# Убеждаемся что dev актуален
git checkout dev
git pull origin dev
# Переключаемся на main и мержим
git checkout main
git pull origin main
git merge dev --no-edit
git push origin main
# → Автосборка → blog.ru
```
---
## Исправление опечатки
```bash
cd ~/projects/blog
# ВСЕ изменения через dev!
git checkout dev
git pull origin dev
# Исправляем
nano content/posts/статья/index.md
# Коммитим
git add .
git commit -m "fix: опечатка в статье"
git push origin dev
# Проверяем на dev, если ОК - публикуем
git checkout main
git merge dev --no-edit
git push origin main
```
---
## Обновление темы (Git submodule)
```bash
cd ~/projects/blog
git checkout dev
git pull origin dev
# Обновляем тему
git submodule update --remote themes/название-темы
# Коммитим
git add themes/название-темы
git commit -m "chore: обновил тему"
git push origin dev
# Проверяем на dev, если ОК - публикуем
git checkout main
git merge dev --no-edit
git push origin main
```
---
## Откат изменений
### Когда откатывать vs когда делать fix
**ОТКАТ → Эксперимент провалился:**
- Функция не работает
- Стили сломали дизайн
- Тестировал - не зашло
**НОВЫЙ КОММИТ → Исправление правильного:**
- Опечатка в статье
- Обновление информации
- Улучшение формулировок
---
### Вариант 1: Git revert (безопасный)
```bash
# Смотрим последние коммиты
git log --oneline -5
# Создаём коммит который отменяет изменения
git revert HEAD
git push origin dev
```
**Плюсы:** История сохранена
**Минусы:** Создаёт дополнительный коммит
---
### Вариант 2: Git reset (жёсткий откат)
```bash
# Откатываемся на предыдущий коммит
git log --oneline -5
git reset --hard HEAD~1
# Принудительно пушим
git push origin dev --force
```
**Плюсы:** Чистая история
**Минусы:** Опасно, нужен `--force`
---
### Откат несохранённых изменений
```bash
# Откатить один файл
git checkout -- путь/к/файлу
# Откатить всё
git reset --hard HEAD
```
---
## Проверка статуса
```bash
# На какой ветке?
git branch
# * dev ← текущая ветка
# Что изменилось?
git status
# История коммитов
git log --oneline -10
# Разница между dev и main
git diff main..dev
# График веток
git log --oneline --graph --all -10
```
---
## Типичные ошибки и их решения
### Случайно начал работать на main
```bash
# Отменяем все изменения (НЕ коммитили)
git checkout -- .
# Переключаемся на dev
git checkout dev
```
---
### Случайно сделал `git add` на main
```bash
# Убираем из staging
git reset
# Переключаемся на dev
git checkout dev
# Добавляем правильно
git add .
git commit -m "feat: ..."
git push origin dev
```
---
### Случайно закоммитил в main
```bash
# Откатываем коммит (изменения остаются)
git reset --soft HEAD~1
# Переключаемся на dev
git checkout dev
# Коммитим правильно
git add .
git commit -m "feat: ..."
git push origin dev
```
---
### Случайно запушил в main
```bash
# Откатываем на main
git checkout main
git reset --hard HEAD~1
git push origin main --force
# Переключаемся на dev и делаем правильно
git checkout dev
git add .
git commit -m "feat: ..."
git push origin dev
```
---
## Быстрые команды
```bash
# Переключиться на dev и подтянуть изменения
git checkout dev && git pull origin dev
# Опубликовать dev в main
git checkout main && git pull origin main && git merge dev --no-edit && git push origin main
# Проверить доступность сайта
curl -I https://blog.ru
curl -I https://dev.blog.ru
```
---
## Полезные алиасы для ~/.gitconfig
```ini
[alias]
st = status
co = checkout
br = branch
ci = commit
unstage = reset HEAD --
last = log -1 HEAD
visual = log --oneline --graph --all -10
dev = checkout dev
prod = checkout main
```
После этого можно:
```bash
git dev # → git checkout dev
git prod # → git checkout main
git visual # → git log --oneline --graph --all -10
```
---
## Стандартный workflow
```bash
# 1. Начало работы
cd ~/projects/blog
git checkout dev
git pull origin dev
# 2. Создаём/редактируем контент
hugo new content posts/название/index.md
hugo server -D --bind 0.0.0.0
# 3. Коммитим
git add .
git commit -m "feat: новая статья"
git push origin dev
# 4. Проверяем на dev окружении
# 5. Публикуем в production
git checkout main
git pull origin main
git merge dev --no-edit
git push origin main
```
---
**Помни:** Dev для экспериментов, main для проверенного контента. Всегда тестируй перед публикацией.