Git — один из самых широко применяемых инструментов совместной работы при разработке ПО. Даже разработчики программного обеспечения, работающие в одиночку, часто используют Git как систему контроля версий. Большинство людей работают с Git через командную строку, но многие редакторы кода и IDE имеют интеграцию Git со встроенными инструментами, упрощающими рабочий процесс. Git используется широко, но многие разработчики имеют лишь поверхностное представление обо всем, что он может предложить. Сегодня делимся некоторыми секретами инструмента.

Поскольку вы здесь, то, наверное, вы готовы выйти за рамки простого (но полноценного!) рабочего процесса:

git add .
git commit -m "fix"
git push

Надеюсь, эти советы и рекомендации по Git повысят вашу эффективность и продуктивность. Если вы станете лучше применять инструменты, которые вам приходится использовать так же часто, как и Git, то вы сможете тратить больше времени на программирование. Разве не здорово тратить меньше времени в попытках решить, использовать git merge или git rebase?

10. Пустые коммиты

Вы когда-нибудь вносили небольшие изменения в README, чтобы можно было запустить сборку CI (или какую-нибудь другую интеграцию) и попытаться отладить какую-то проблему? Раньше я делала это довольно часто, пока не узнала о следующей полезной команде:

git commit --allow empty -m 'it works!'

Этот флаг git позволяет инициировать коммит без содержимого и миновать обычную ошибку, говорящую, что у вас нет подготовленных файлов. Этот прием особенно полезен для того, чтобы запустить рабочий процесс без мелких изменений в README или какого-нибудь другого файла. Команда git diff не покажет никаких изменений, но коммит полезен, когда нужно запустить CI-прогон или даже развертывание в продакшне, а отправлять какой-то произвольный код не нужно.

9. Приятный лог

Команда git log — очень полезный способ просмотреть последние изменения кодовой базы, но глаза быстро разбегаются, если запускать ее в проекте с большим количеством веток. Еще одна хитрость git — сделать git log интереснее, добавив немного цвета, чтобы помочь глазам и мозгу лучше читать вывод на экране.

Чтобы получить улучшенный вывод git log, не меняя конфигурацию Git, просто запустите эту команду:

git log --pretty=oneline --graph --decorate --all</span >

Вот пример того, что можно ожидать:

Вы заметите как цветовое кодирование, так и разумное применение | и \\, чтобы обозначить ветки. Хотя эти флаги ничего не меняют в логе функционально, они, безусловно, значительно облегчают понимание вывода git log.

8. Очистка локальных веток

Если вы похожи на меня, то вам нравится поддерживать относительный порядок на рабочем месте, в том числе на компьютере.

Разработка ПО способна быстро привести к замешательству, особенно если вы работаете с большим количеством репозиториев. Ситуацию усугубляет работа с Git, который в каждом репозитории может оставить несколько ветвей на долгое время уже после того, когда эти ветки не нужны.

Наверное, со временем вы добавили в конфигурацию Git разные вещи, чтобы изменить свои ощущения от работы. А мне очень понравился параметр git config, при выполнении fetch или pull удаляющий любую локальную ветку, которая удалена из репозитория на сервере.

Быстро установить этот параметр можно, выполнив:

git config --global fetch.prune true

Еще один совет по Git, кроме изменения конфигурации, — пойти дальше и удалить локальные ветки, которые уже влиты в master.

Выполните эту команду:

git branch --merged master | grep -v "master" | xargs -n 1 git branch -d

7. Поиск убранного коммита через git reflog

Выполнять git rebase крайне полезно, особенно с флагом --interactive. Однако перебазирование может быть опасно. При локальном git rebase вам придется принудительно перезаписать изменения в репозитории на сервере. Выполняя перебазирование достаточно часто, вы в конечном счете случайно удалите коммит или несколько.

Если вам не повезло так же, как и мне, или вы не информированы, то можете даже случайно удалить работу, выполненную за неделю. Один из моих любимых советов — выполните git reflog, чтобы вернуть недостающие коммиты из мертвых.

Поскольку вы закоммитили свою работу, она все еще находится в вашей локальной рабочей копии репозитория вне зависимости от того, делали ли вы git rebase. С помощью git reflog можно найти хеш SHA1, который вам нужен. Затем запустите git checkout <SHA1>, скопируйте все, что вам нужно, и запустите git checkout HEAD, чтобы вернуться к самому последнему коммиту в локальной ветке. И кризис предотвращен!

6. Алиас для git blame

Время от времени возникает ошибка, которую вы не сможете обнаружить самостоятельно. А иногда захочется или будет нужно обратиться к человеку, который, похоже, написал неработающий код. Возможно, вам даже захочется поговорить с автором, чтобы лучше понять контекст кода.

Чтобы выяснить, кто написал строку кода, часто используют git blame. Команда git blame показывает, кто на самом деле написал строку кода, когда написал ее и в каком коммите она добавлена в кодовую базу. Эта функциональность встроена во многие редакторы кода и IDE — имена отображаются рядом с каждой строкой кода!

Это недооцененная функция Git, но запускать git blame не очень приятно. Важно, чтобы команды разработчиков ПО формировали культуру без обвинений, а формулировка git blame может создать неподходящий прецедент.

И вот хорошая новость! На самом деле вы можете переименовать команду, используя алиас из вашей конфигурации Git. Это самый подвижнический из советов здесь. Чтобы создать псевдоним git balme, который будет вызываться как git investigate, выполните команду:

git config --global alias.investigate blame

investigate можно заменить на любое слово! Ваша конфигурация Git также может содержать псевдонимы для других команд, а не только git blame, если захотите.

5. Команда git add -p для поэтапного коммита

В начале статьи я обещала, что мы оставим git add в прошлом. Наверное, вы уже знаете, что все изменения можно в локальном репозитории можно подготовить к коммиту через git add.

И, вероятно, еще вы знаете, что это делается более многословно. С просмотром того, какие изменены файлы, через git status и с проверкой изменения файла с помощью git diff <filename>, а также с подготовкой файлов по отдельности с помощью git add <filename>. Нормально, если вы готовите к коммиту один файл, но это может быстро стать проблемой, когда у вас большой набор локальных изменений.

Эта опция многословнее, но это важный шаг, чтобы проверить, что вы подготовили локальные изменения, которые собираетесь закоммитить. Нет ничего хуже, чем закоммитить что-нибудь случайно, особенно если код содержит конфиденциальные данные, например секрет приложения. К счастью, есть способ внести изменения еще лучше!

Вносить изменения можно по кусочку, выполнив:

git add -p

Вероятно, этот совет сильнее всего ускорит вашу работу. При такой подготовке коммитов в Git открывается интерактивная подсказка. Она показывает разделы каждого файла, которые были изменены. Это дает возможности подготовить их к коммиту или пропустить и многие другие возможности.

Команда упрощает поэтапную обработку изменений валидацией каждого изменения, а еще она полезна, если вы хотите закоммитить только часть изменений файла. Иногда я увлекаюсь до степени понимания того, что изменений у меня в файле гораздо больше, чем имеет смысл коммитить вместе.

Вот пример:

4. Кусочки кода в git stash

Флаг -p предназначен не только для подготовки кода! Его можно использовать с git stash, если не хочется выполнять git stash на всех файлах или на одном файле с изменениями целиком.

Чтобы поэтапно выполнить git stash для кода в рабочем каталоге, выполните:

git stash -p

При запуске вы увидите интерактивный экран, аналогичный экрану команды git add -p, который шаг за шагом проведет вас через каждое изменение по одному разделу за раз.

3. Автоматизация git bisect

Хотя это самый сложный из приемов Git, автоматизация git bisect со временем может принести пользу. Если вы уже понимаете, как использовать git bisect, то знаете, что работа с git bisect может потребовать большого количества команд. А это, в свою очередь, может сделать ее не такой практичной.

Она сложная, поэтому вам может быть интересно узнать, что на самом деле можно написать скрипт, который автоматизирует часть процесса. Написав скрипт git bisect, для запуска скрипта вы сможете использовать простую команду:

git bisect run my_script аргументы

2. Эмоджи в Git

Хотя это, наверное, самый бесполезный из этих советов этой статьи, эмоджи в сообщениях о коммитах — простой способ добавить веселья вам и вашим коллегам! Можно легко вставлять смайлы в сообщения о коммитах, если знаете их названия. Воспользуйтесь шпаргалкой Gitmoji, чтобы выбрать подходящий смайлик и вставить его в виде текста в сообщение о коммите:

git commit -m ":package: Add a docker container to the app"

1. Справочная документация Git

Меня всегда удивляет, как быстро я забываю о встроенных справочных инструментах в ряде приложений и интерфейсах командной строки. Я буду пытаться найти ответ в бесконечном количестве ответов на Stack Overflow, чтобы решить свою проблему.

И, наконец, вспомню, что могу получить помощь, просто запустив:

git help

Вся документация Git у вас под рукой как часть интерфейса командной строки Git! Если вы новичок в Git или просто хотите освежить знания, то командой ниже можете даже перейти к руководству:

git help tutorial

В этом руководстве вы познакомитесь с основами.

Наконец, если вы хотите получить документацию по конкретной команде, то можете использовать man, чтобы получить мануал. Например, выполните man git-log, если хотите больше узнать о команде git log.

Еще больше советов по Git

Вот и мои десять любимых советов и приемов с Git. Будь то настройка конфигурации, подготовка изменений через git add -p, -p с git stash или git reflog, эти трюки сделают Git полезнее для вас и вашей команды. Надеюсь, вы наткнулись на что-нибудь новое или освежили память о команде, которую забыли.

Git — удивительно мощный инструмент, и мы должны использовать его по максимуму. Если вы нашли какой-то трюк с Git полезным, поделитесь им со своими коллегами!

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Julie Kent: Top ten Git tips & tricks

Предыдущая статья7 React-проектов, которые помогут вам стать лучшим разработчиком
Следующая статьяМета-фреймворки JavaScript: переосмысление современной веб-разработки