Какой опыт работы с 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 перед мёрджем.
  • Использование 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.
  • Использование утилит типа 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 включает уверенное владение как повседневными командами, так и продвинутыми техниками для поддержки чистой истории коммитов, эффективной командной работы и надёжного отката или восстановления изменений при необходимости.