package devopsmodules import ( "rubric/utils" ) var GitModule = Module{ Key: "git", Aliases: []string{"g", "vcs"}, Title: "Git — система контроля версий", Description: "Основы, ветвление, merge/rebase, удалённые репозитории, рабочие процессы", Run: showGit, } func showGit() { utils.Header("DevOps — Git") utils.Section("Основы и настройка") utils.Code(`# Первоначальная настройка: git config --global user.name "Alice Smith" git config --global user.email "alice@example.com" git config --global core.editor vim git config --global init.defaultBranch main git config --global pull.rebase false # merge при pull git config --list`) utils.Println(utils.ColorBold + "Создание репозитория:" + utils.ColorReset) utils.Command("git init", "инициализировать в текущей папке") utils.Command("git clone https://github.com/user/repo", "клонировать") utils.Command("git clone --depth 1 https://github.com/user/repo", "только последний коммит") utils.Command("git clone -b develop https://github.com/user/repo", "конкретная ветка") utils.Section("Базовые операции") utils.Code(`git status # состояние рабочей директории git status -s # краткий формат # Staging: git add file.txt # конкретный файл git add . # все изменения git add -p # интерактивно по кускам # Коммит: git commit -m "feat: добавить авторизацию" git commit -am "fix: исправить баг" # add + commit git commit --amend # изменить последний коммит # История: git log --oneline --graph --all # граф всех веток git log --since="2 weeks ago" --author="Alice" git log -p file.txt # история файла с диффом`) utils.Println(utils.ColorBold + "Diff и просмотр:" + utils.ColorReset) utils.Command("git diff", "изменения не в staging") utils.Command("git diff --staged", "изменения в staging") utils.Command("git diff main..feature", "между ветками") utils.Command("git show abc1234", "конкретный коммит") utils.Command("git blame file.txt", "кто написал каждую строку") utils.Section("Ветвление") utils.Code(`git branch # список локальных веток git branch -a # включая удалённые git switch -c feature/login # создать и переключиться git switch main # переключиться git branch -d feature/login # удалить влитую ветку git branch -D feature/login # принудительно # Merge: git merge --no-ff feature/login # всегда создавать merge commit git merge --squash feature/login # слить все коммиты в один git merge --abort # отменить при конфликте # Rebase: git rebase main # перенести коммиты поверх main git rebase -i HEAD~3 # интерактивный (squash, reword, drop...) git rebase --abort / --continue`) utils.Note("Не делай rebase публичных веток, которые уже запушены.") utils.Section("Удалённые репозитории") utils.Command("git remote -v", "список удалённых") utils.Command("git remote add origin https://github.com/user/repo", "добавить") utils.Command("git fetch --all", "скачать изменения без слияния") utils.Command("git pull --rebase", "fetch + rebase") utils.Command("git push -u origin feature/login", "отправить и установить upstream") utils.Command("git push --force-with-lease", "force push с проверкой (безопаснее --force)") utils.Section("Откат изменений") utils.Code(`git restore file.txt # вернуть файл как в HEAD git restore --staged file.txt # убрать из staging git revert HEAD # новый коммит-отмена git reset HEAD~1 # убрать последний коммит, оставить изменения git reset --hard HEAD~1 # убрать коммит И изменения (осторожно!) # Stash — временное сохранение: git stash push -m "wip: форма логина" git stash list git stash pop # восстановить последний git stash branch feature/wip # создать ветку из stash`) utils.Section("Теги и продвинутые команды") utils.Code(`git tag -a v1.0.0 -m "Релиз" # аннотированный тег git push origin --tags # отправить все теги # Cherry-pick — перенести конкретный коммит: git cherry-pick abc1234 # Bisect — бинарный поиск бага: git bisect start git bisect bad # текущая версия сломана git bisect good v1.0.0 # эта работала # git bisect good / bad до нахождения git bisect reset`) utils.Section("Рабочие процессы (Workflows)") utils.Code(`Git Flow: main — продакшн (только теги релизов) develop — интеграционная ветка feature/* — новые функции (от develop) release/* — подготовка релиза hotfix/* — срочные правки (от main) GitHub Flow (проще): main — всегда рабочий код feature/* — ветка от main → Pull Request → merge Trunk-Based Development (для CI/CD): main — единая ветка, коммиты несколько раз в день Короткоживущие ветки (< 1 дня), feature flags Conventional Commits: feat: — новая функциональность fix: — исправление бага docs: — документация refactor: — рефакторинг test: — тесты chore: — сборка, зависимости`) utils.Code(`# .gitignore — игнорируемые файлы: *.log node_modules/ .env __pycache__/ build/ dist/ .DS_Store`) utils.Footer() }