Какой опыт работы с Git
Опыт работы с Git охватывает как базовые, так и продвинутые аспекты использования распределённой системы контроля версий в индивидуальной и командной разработке. Git используется для отслеживания изменений в исходном коде, работы с ветками, совместной разработки, разрешения конфликтов и управления историей изменений проекта. Ниже представлены основные области, в которых проявляется практический опыт работы с Git:
1. Инициализация и клонирование репозиториев
- git init — создание нового локального репозитория.
- git clone — клонирование удалённого репозитория, включая историю коммитов и ветки.
- Работа с публичными и приватными репозиториями на GitHub, GitLab, Bitbucket.
2. Базовые операции
- git add, git commit, git status, git diff — формирование снимков изменений, фиксация и анализ разницы между версиями.
- Использование различных флагов: git commit -m, git diff --staged.
- Работа с файлами .gitignore для исключения временных или секретных файлов из индекса.
3. Работа с ветками (branching)
- Создание веток: git branch feature-X, git checkout -b feature-X.
- Слияние веток: git merge, git merge --no-ff, git merge --squash.
- Удаление веток: git branch -d, git branch -D.
- Работа с конфликтами при слиянии (merge conflicts): понимание причин, ручное разрешение, тестирование перед завершением.
- Использование rebase для линейной истории: git rebase, git rebase -i.
4. Удалённые репозитории
- Добавление удалённого репозитория: git remote add origin ....
- Извлечение изменений: git fetch, git pull.
- Отправка изменений: git push, git push --set-upstream origin feature-X.
- Работа с несколькими remotes и push/pull policies.
5. История и логирование
- Просмотр истории: git log, git log --graph --oneline --all, git show.
- Поиск изменений: git blame, git grep, git log -S.
6. Работа с тэгами
- Создание тегов для релизов: git tag v1.0, git tag -a v1.0 -m "release v1.0".
- Отправка тегов: git push origin --tags.
- Удаление тегов локально и на сервере.
7. Stash (временное сохранение изменений)
- Сохранение незавершённых изменений: git stash, git stash save "описание".
- Восстановление: git stash apply, git stash pop.
- Просмотр и управление: git stash list, git stash show.
8. Ревизия коммитов
- git reset — для отката коммитов, в зависимости от флага (--soft, --mixed, --hard).
- git revert — для отмены коммита без изменения истории.
- git cherry-pick — выборочный перенос коммитов из одной ветки в другую.
9. Интерактивные инструменты
- git rebase -i — интерактивное редактирование коммитов: squash, reorder, fixup.
- Использование GUI-клиентов: GitKraken, SourceTree, GitHub Desktop.
- Работа через IDE (VS Code, WebStorm, IntelliJ) с интеграцией Git.
10. Ревью кода и Pull Requests
- Работа с pull request-ами через GitHub, GitLab:
- Создание pull request.
- Просмотр изменений.
- Ревью кода: комментарии, suggestions.
- Разрешение конфликтов в процессе merge request.
- Применение правил CI/CD перед мёрджем.
- Создание pull request.
- Использование Draft PR, squash merge, rebase merge.
11. Работа с подмодулями (submodules)
- Инициализация: git submodule add.
- Обновление: git submodule update, git submodule sync.
- Управление внешними зависимостями как частью проекта.
12. Работа с git hooks
- Настройка клиентских и серверных хуков:
- pre-commit, commit-msg, pre-push.
- pre-commit, commit-msg, pre-push.
- Использование утилит типа Husky или lint-staged для автоматизации lint’а перед коммитом.
- Пример: запрет коммита без прохождения тестов.
13. Интеграция с CI/CD
- Использование Git как триггер в системах Jenkins, GitLab CI, GitHub Actions.
- Тегирование и деплой через push-коммиты.
- Настройка правил ветвления: main / develop, feature-ветки, release-ветки.
14. Работа в командной разработке
- Использование feature-веток, git flow и trunk-based development.
- Совместная работа с коллегами через pull request-процессы, code owners.
- Регулярная синхронизация с main или develop.
15. Оптимизация и восстановление
- Очистка репозитория: git gc, git prune.
- Восстановление утерянных коммитов через git reflog.
- Восстановление удалённых файлов или веток при ошибке.
Таким образом, опыт работы с Git включает уверенное владение как повседневными командами, так и продвинутыми техниками для поддержки чистой истории коммитов, эффективной командной работы и надёжного отката или восстановления изменений при необходимости.