Git является одним из наиболее широко используемых инструментов для совместной работы в разработке программного обеспечения. Даже разработчики, работающие вне команд, часто используют Git в качестве системы контроля версий. Большинство пользователей взаимодействуют с Git через командную строку, однако многие редакторы кода и среды разработки имеют встроенную интеграцию с инструментами Git, облегчающую рабочий процесс. Несмотря на широкое распространение Git, многие разработчики лишь поверхностно понимают весь потенциал инструмента.
Если вы уже знакомы с принципами работы Git, эта статья поможет вам повысить уровень ваших навыков и стать лучшим коллегой.
Поскольку вы читаете этот материал, вероятно, вы готовы выйти за рамки простого (но полного!) рабочего процесса:
git add .
git commit -m "fix"
git push
Эти советы и приемы Git позволят вам повысить эффективность и продуктивность как разработчику. Чем лучше вы освоитесь с инструментом, которым пользуетесь ежедневно, тем больше времени сможете посвятить кодированию. Разве не было бы здорово тратить меньше времени на размышления о том, какой метод выбрать — git merge или git rebase?Без дальнейших предисловий приступим!
10. Создавайте пустые коммиты
Иногда возникает необходимость внести небольшие изменения в файл README, чтобы запустить сборку CI (или другую интеграцию), пытаясь отладить баг. Раньше я делал это довольно часто, пока не узнал следующую полезную команду:
git commit --allow-empty -m 'it works!'
Этот флаг позволяет создать пустой коммит, минуя ошибку, возникающую при отсутствии изменений. Этот трюк особенно полезен, когда нужно инициировать выполнение workflow без внесения незначительных изменений в файлы, такие как README. Команда покажет отсутствие изменений (git diff), но сам коммит помогает запускать CI или даже развертывания в продакшен без принудительного пушинга произвольного кода.
9. Сделайте ваш log красивым!
Запуск команды git log — отличный способ просмотреть недавние изменения в кодовой базе, но в результате легко потеряться, особенно если вы используете её на проекте с множеством веток. Следующий полезный прием Git заключается в улучшении внешнего вида лога, при помощи добавления в него цвета. Так в нём проще ориентироваться.
Для красивого вывода журнала без изменений конфигурации Git выполните следующую команду:
git log --pretty=oneline --graph --decorate --all
Вот пример того, что вы можете увидеть:
Обратите внимание на использование цветов и символов "|" и "/", обозначающих ветвление. Хотя эти флаги функционально ничего не меняют в выводе журнала, они значительно упрощают понимание результата команды git log.
8. Очистка локальных ветвей
Если вы похожи на меня, то предпочитаете поддерживать порядок на рабочем месте, включая компьютер.
Разработка ПО быстро создает беспорядок, особенно если вы работаете над несколькими репозиториями одновременно. Использование Git усугубляет ситуацию, оставляя большое количество ветвей в каждом репозитории, хотя большинство из них давно утратило свою актуальность.
Со временем вы наверняка добавили различные настройки в конфигурационный файл Git, чтобы адаптировать инструмент под себя. Я влюбился в настройку fetch.prune, удаляющую любые локальные ветки, удалённые из удалённого хранилища при выполнении операций 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). Однако перезапись истории опасна. Когда вы выполняете операцию rebase локально, приходится делать force push для влития изменений, переписывая историю удаленного репозитория. Если вы достаточно часто применяете rebase, рано или поздно вы можете случайно удалить нужный коммит (или несколько).
Если вам так же не везёт (или вы так же плохо осведомлены), как мне, возможно, вы даже случайно удалили целую неделю работы. Один из моих любимых советов по работе с Git — использовать команду git reflog, чтобы вернуть потерянные коммиты из небытия.
Примечание переводчика: Git reflog — это инструмент, который отслеживает все изменения в истории репозитория, даже те, которые были удалены. Это может спасти вашу работу, если вы случайно удалили важные изменения.
Если ваша работа была зафиксирована коммитом, она всё ещё существует в вашей локальной рабочей копии независимо от того когда вы сделали git rebase. Используя git reflog, вы найдёте нужное значение SHA1, затем запустите команду git checkout <SHA1>, скопируете необходимые данные и вернётесь обратно командой git checkout HEAD. Кризис предотвращён!
6. Псевдоним для команды git blame
Время от времени вы сталкиваетесь с ошибкой, которую не можете самостоятельно понять. Иногда вам хочется или нужно обратиться к человеку, написавшему код, который кажется некорректным. Возможно, вы хотите поговорить с автором, чтобы лучше понять контекст написания кода.
Часто используется команда git blame, чтобы выяснить, кто написал определённую строчку кода. Фактически, git blame показывает автора строки, дату её добавления и номер коммита, в котором строка попала в кодовую базу. Многие редакторы кода и среды разработки интегрируют эту функциональность прямо в редактор, отображая имена рядом с каждой строкой кода!
Это недооценённая возможность Git, но сама команда звучит не очень приятно (Прим переводчика: слово blame в английском переводится как "обвинить"). Важно, чтобы команды разработчиков поддерживали культуру отсутствия обвинений, а формулировка команды может задать неправильный тон.
Хорошая новость! Вы можете изменить любую команду Git, используя псевдоним в вашем файле конфигурации Git. Для переименования команды git blame в git investigate (Прим переводчика: слово investigate звучит приятнее потому что означает "исследовать") выполните такую команду:
git config --global alias.investigate blame
Вы можете заменить слово investigate на любое другое по вашему желанию! В конфигурации Git также можно хранить псевдонимы (aliases) для других команд, так что вы можете расширить эту возможность за пределы команды git blame, если захотите.
5. Используйте git add -p для постепенной фиксации изменений (самый экономящий время приём)
В начале статьи я обещал, что мы перейдем дальше простого git add ..
Вероятно, вы знаете, что можно подготовить к коммиту все изменения в локальном репозитории одной командой git add ..
Также известно, что можно сделать это вручную, просматривая список файлов с изменениями через git status, проверяя содержимое файла с помощью git diff <filename> и фиксируя каждый файл отдельно командой git add <filename>. Это хорошо работает, если готовите к коммиту один файл, но становится болезненным процессом, если у вас много локальных изменений.
Эта версия длиннее, но важна для проверки, действительно ли вносимые вами изменения соответствуют вашим намерениям. Нет ничего хуже, чем случайный коммит лишнего содержимого, особенно если оно включает важные данные вроде секретов или ключей приложения. К счастью, есть лучший способ фиксации изменений!
Можно поэтапно добавлять изменения, выполнив команду:
git add -p
Вероятно, это самый эффективный приём среди всех приведенных в статье советов по работе с Git. Эта команда открывает интерактивное меню, показывающее фрагменты каждого изменённого файла и предоставляя выбор между добавлением, пропуском фрагмента и другими действиями.
Такой подход облегчает проверку изменений перед коммитом, но также удобен, если вы хотите добавить только часть изменений одного файла. Иногда я увлекаюсь настолько, что понимаю, что сделал гораздо больше изменений в одном файле, чем стоит поместить в один коммит.
Пример использования команды:
4. Поэтапное сохранение кода с помощью команды stash
Флаг -p (piecewise) подходит не только для подготовки изменений к коммиту! Его также можно применять с командой git stash, когда вы не хотите сохранять все файлы или весь изменённый файл целиком.
Чтобы сохранить изменения в рабочей директории по частям, выполните команду:
git stash -p
При выполнении команды git stash -p появится аналогичное интерактивное окно, как при использовании git add -p, позволяющее пройти по каждому изменению построчно.
3. Автоматизация команды git bisect
Хотя это самая сложная рекомендация среди наших советов и трюков, автоматизация команды git bisect может принести значительную пользу со временем. Если вы уже умеете пользоваться командой git bisect, то знаете, что её применение требует множества команд, что не очень практично.
Git даёт возможность написать скрипт, автоматизирующий этот процесс. После написания скрипта для git bisect вы сможете использовать простую команду для запуска вашего сценария:
git bisect run my_script arguments
2. Добавляйте эмодзи в сообщения коммитов
Хотя это, возможно, наименее полезная рекомендация из нашего списка, использование эмодзи в сообщениях коммитов — простой способ раскрасить рабочий день для вас и ваших коллег!
Легко вставлять эмодзи в сообщения коммитов, зная их названия. Можно воспользоваться шпаргалкой Gitmoji, выбрав подходящий символ и вставив его текстом в коммит таким образом:
git commit -m ":package: Добавил Docker-контейнер в приложение"
1. Обращайтесь к документации Git
Меня постоянно удивляет, насколько быстро забываются встроенные инструменты помощи многих приложений и интерфейсов командной строки. Вместо бесконечного перебора решений с сайта Stack Overflow я наконец вспоминаю, что могу получить помощь, просто введя команду:
git help
Буквально вся документация Git доступна прямо из интерфейса командной строки! Если вы совершенно новый пользователь Git или просто хотите освежить знания, вы можете перейти к руководству, выполнив команду:
git help tutorial
Это руководство проведет вас через основы работы с Git.
Наконец, если вы хотите ознакомиться с документацией конкретной команды, вы можете использовать команду man для просмотра руководства. Например, команда man git-log, если вы хотите узнать больше о команде git log.
Где искать дополнительные советы по Git
Итак, вот мои десять любимых советов и приёмов работы с Git. Будь то настройка конфигурации Git, пошаговая фиксация изменений с помощью git add -p, использование флага -p с командой git stash или обращение к журналу Git (reflog), полученные сегодня приёмы сделают работу с Git более удобной для вас и вашей команды. Надеюсь, вы узнали что-то новое или вспомнили забытые ранее команды.
Git — невероятно мощный инструмент, и нам следует максимально эффективно его использовать. Если у вас есть любимый приём работы с Git, поделитесь им с коллегами!
Оригинал статьи читайте по ссылке