Про Git для разработчика

Никита Калашников
Git (Гит) — это распределенная система управления версиями. Она позволяет разработчикам фиксировать изменения (делать коммиты), работать над разными частями проекта параллельно и легко возвращаться к предыдущим версиям, работая локально на своем компьютере.
Если лет 10-12 назад, работая в маленькой комнде мы работало в локальной сети и хранили проекты локально, каждый раз приходилось вручную переносить куски кода в боевую версию (считайте продовскую). Это был ад.
Сейчас для этого есть Гит. Я использую его почти каждый день, в том числе на всех своих проектах. В статье я описываю самые популярные команды, которые использую в 95% всей работы с гитом.
Git init: точка отсчета
Команда git init создает новый репозиторий в папке проекта. На самом деле эта команда используется не очень часто (странно если кто-то каждый день создает новый проект), но её важно знать.
Чаще всего работая на компании я просто клонирую уже существующий проект.
Git commit: фиксация прогресса
git commit — это сохранение состояния вашего кода. Процесс прост: добавляем изменения в индекс через git add . (точка говорит добавить все изменения), а затем коммитим с понятным описанием.
Как я коммичу: В среднем я делаю — по 5–10 коммитов в день, а то и больше, все зависит от объема задачи и возможности её декомпозиции. Исправил стили в шапке? git commit -m "Fix: mobile header styles". Это делает историю проекта прозрачной. Если коллега увидит мой код через месяц, он по описанию поймет, зачем вносились правки.
Git push и git pull: синхронизация
Эти команды отвечают за обмен кодом с удаленным сервером (GitHub или GitLab).
git pull— забирает актуальный код из удаленного репозитория.git push— отправляет локальные наработки в общую ветку.
Пример: При старте новой задачи (таски) создаешь ветку, например, от master, перед этим делаешь git pull, чтобы получить актуальные данные из ветки. Это позволяет избежать конфликтов слияния в при мерже изменений.
Git merge: объединение усилий
Когда задача в отдельной ветке готова, её нужно перенести в основную. Для этого есть команда git merge.
Процесс: Допусти в спринте делали функционал активации партнерских промокдов в ветке feature/partnersPromocode. После тестов я переключаюсь на основную ветку (git checkout master), подтягиваю обновления и выполняю слияние (git merge feature/partnersPromocode). Если вы регулярно делаете pull, конфликтов практически не возникает.
Git stash: незаменимый инструмент при многозадачности
Команда git stash — моя любимая. Она позволяет «спрятать» незавершенные изменения в виртуальный карман и очистить рабочую директорию.
Stash я использую чаще всего, из всех команд скорее всего в 80%.
Ситуация: Вы в разгаре написания сложной функции, и тут прилетает задача «срочно поправить баг на проде». Коммитить сырой код нельзя, а бросать всё — жалко.
- Пишем
git stash push -m "WIP: auth logic". Изменения сохранены, ветка чиста. - Переключаемся на
master, фиксим баг, пушим. - Возвращаемся:
git stash pop. Весь ваш код на месте, можно продолжать.
Дополнительно: Git может хранить десятки таких «заначек». Команда git stash list покажет список, а git stash apply stash@{n} позволит применить конкретную из них. Это избавляет от необходимости плодить лишние ветки для каждой мелкой правки.
Подытог
Гит значительно ускоряет и упрощает работу как в целом в команде, так и в соло-разработке. Во-первых все ваши проекты в удаленном репозитории и вы можете разворачивать их с любого устройства. Во-вторых любой разработчик может делать pull request и делать свой вклад в ваш проект. В-третьих вся информация о коммитах и история разработки хранится в репозитории и доступна.