Гит это сложно. Кроме того, для многих новых разработчиков это первый инструмент с интерфейсом командной строки (CLI), который они используют. Это может быть слишком много, если вы изучаете все следующее одновременно:
- как использовать интерфейс командной строки
- как использовать гит
- и последнее, но не менее важное: программирование
В этой статье я покажу вам несколько приемов, которые сделают ваш опыт работы с Git менее болезненным и более увлекательным!
Проверьте свое состояние
Git достаточно щедр, чтобы предложить множество команд для проверки состояния вашего репозитория, и в то же время достаточно предусмотрителен, чтобы не перегружать новичка многословием. Короче говоря, вы должны попросить Git предоставить вам необходимые детали. Для этого у вас есть следующая команда:
статус git
Ключевая команда, чтобы получить представление о том, где вы находитесь в Git. Пример выходных данных:
$ git status On branch main Your branch is up to date with 'origin/main'. nothing to commit, working tree clean
когда вы находитесь на чистой ветке и в курсе
$ git status HEAD detached at abc01e7 nothing to commit, working tree clean
когда вы находитесь в отключенном состоянии HEAD.
$ git status On branch main Your branch is up to date with 'origin/main'. Untracked files: (use "git add <file>..." to include in what will be committed) lorem-ipsum.txt nothing added to commit but untracked files present (use "git add" to track)
Когда у вас есть несколько новых файлов в вашей рабочей копии.
git-шоу
Это команда, которая позволяет вам увидеть изменения, произошедшие в коммите. При запуске без аргумента показывает текущую фиксацию:
$ git show commit abc01e761cb9cc14c4d5aecae2488810c834c0f9 (HEAD -> main, origin/main, origin/HEAD) Author: Marcin Wosinek <[email protected]> Date: Wed Nov 2 11:57:33 2022 +0100 Add lorem ipsum to readme diff --git a/README.md b/README.md index 8ae0569..9dca8b4 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ # Test +Lorem ipsum
Вы получаете все подробности о коммите: его автор, время, сообщение и различия каждого файла, который был изменен.
Вы можете указать любой коммит, который хотите увидеть:
$ $ git show edd3504 commit edd3504f6edc722482fa4383443fa1729acc9a87 …rest of the output…
Примечание! Эта команда работает с коммитами. Таким образом, если вы используете имя ветки, оно покажет самую последнюю фиксацию из этой ветки:
$ git show main commit abc01e761cb9cc14c4d5aecae2488810c834c0f9 (HEAD -> main, origin/main, origin/HEAD) Author: Marcin Wosinek <[email protected]>
git tree —
собственный псевдоним, который я всем рекомендую
Для просмотра графа всех ветвей рекомендую задать алиас дерева — подробнее об этом можно узнать в этой статье. С его помощью вы можете запустить:
$ $ git tree * 11f7f3c (test) add test.txt file | * 2dbd30f (origin/test) add test.txt file | * e7be203 (test-2) add new file |/ * abc01e7 (HEAD -> main, origin/main, origin/HEAD) Add lorem ipsum to readme * edd3504 Add readme
И получить хороший обзор всего репозитория.
Проверьте, какой у вас редактор по умолчанию
В некоторых случаях Git хочет, чтобы вы вводили данные, редактируя созданный им временный файл. Поначалу этот рабочий процесс может сбивать с толку, особенно если вы не знаете редактор по умолчанию. Вот как это проверить, перечислив логические переменные Git и отфильтровав из них ту, которая содержит EDITOR
. В моей MacOS это vi
:
$ git var -l | grep EDITOR GIT_EDITOR=vi
Аналогично в Ubuntu:
$ git var -l | grep EDITOR GIT_EDITOR=editor
В Ubuntu editor
— это команда, которая запускает то, что настроено как ваш текстовый редактор по умолчанию. На одной машине, к которой у меня есть доступ, это nano
:
$ update-alternatives --display editor editor - auto mode link best version is /bin/nano link currently points to /bin/nano …
Независимо от вашего редактора, убедитесь, что вы знаете, как делать следующие вещи:
- отредактируйте файл, что может быть сложно для новичков в
Vim
из-за различных режимов его интерфейса - сохранить изменения
- выйти из редактора
Или измените редактор на что-то, что вы знаете, как использовать.
Используйте вкладку при вводе команд
Команды Git, все атрибуты и имена веток длинные; и интерфейс не допускает ошибок. Ключевой трюк повышения производительности — не печатать их целиком. В большинстве оболочек, когда вы нажимаете клавишу табуляции, оболочка либо:
- показывает вам все доступные автозавершения команд
- выбирает команду, если доступна только одна
Итак, например, с оболочкой zsh
, которую я использую, давайте посмотрим на эти параметры после ввода git co<tab>
:
$ git co Completing main porcelain command commit -- record changes to repository Completing ancillary manipulator command config -- get and set repository or global options Completing ancillary interrogator command count-objects -- count unpacked objects and display their disk consumption Completing plumbing manipulator command commit-graph -- write and verify Git commit-graph files commit-tree -- create new commit object Completing plumbing internal helper command column -- display data in columns
И просто завершите слово, когда я наберу git com<tab>
:
$ git commit
Точно так же он обеспечивает автозаполнение для параметров, имен ветвей и т. д. Это имеет большое значение при наборе текста.
Используйте стрелки
Смотреть, как кто-то повторяет всю команду, которую он использовал несколько минут назад, — болезненный опыт. Большинство оболочек позволяют повторно использовать последнюю команду, просто используя клавиши со стрелками. Стрелка вверх выводит самую последнюю команду, вы вводите ее снова, чтобы получить предыдущую, и так далее. Найдя нужный, вы можете отредактировать его, чтобы он соответствовал операции, которую вы выполняете прямо сейчас.
Постоянно получайте удаленные изменения
Я постоянно синхронизирую свой локальный репозиторий с удаленным — даже в своих личных репозиториях, где я знаю, что работаю один. Слишком легко все испортить, не обращая внимания на то, что меняют другие. И требуется всего одна команда, чтобы убедиться, что все в актуальном состоянии:
$ git fetch
После его запуска вы знаете, что каждая ссылка origin/<branch-name>
, которую вы видите локально, находится в том же месте, что и удаленно.
Конфликты иногда очень болезненно исправлять, но нет ничего более болезненного, чем конфликты, которых можно было бы легко избежать. Один из распространенных сценариев, когда люди создают ненужный конфликт, — это запуск новой ветки после самой последней фиксации. Этого легко избежать, если:
- делать выборку все время
- обращая внимание на то, где вы находитесь в дереве истории
Короткоживущие ветки
Наличие веток, которые быстро объединяются, имеет несколько преимуществ:
- новые функции быстрее интегрируются в кодовую базу. Если они не совсем готовы, их всегда можно скрыть флажком фичи.
- меньшее количество изменений как в основной, так и в другой ветке означает меньший риск конфликтов,
- меньшие ветки означают меньше кода для проверки.
Краткосрочные ветки — это способ прогресса посредством небольших взаимодействий — то, что я рекомендую в другой статье.
Чего следует избегать
Я часто вижу, как новички приходят с проблемами, с которыми мне обычно не приходится иметь дело, потому что я избегаю следующих вещей в Git:
git тянуть
В Git pull объединяет две операции в одну:
Я всегда хочу перепроверить свое удаленное состояние перед выполнением слияния или перебазирования. Итак, мой типичный поток будет таким:
git fetch
-для получения обновлений удаленно,git tree
-псевдоним, который я упомянул выше, чтобы убедиться, что репо находится в том состоянии, в котором я ожидаю,git rebase origin/<branch-name>
-когда есть изменения на удаленке и локально, или- `git merge origin/ — когда есть изменения на удаленном компьютере, но не локально. То есть это можно сделать как быстрое слияние вперед.
Подмодули Git
Наконец, подмодули — это способ встраивания репозитория или репозиториев Git внутрь другого. Внутренний репозиторий поддерживает свою отдельную историю, тогда как содержащий его хранит только ссылку на источник и текущую фиксацию, в которой должен находиться внутренний репо.
Моя главная проблема с подмодулями Git заключается в том, что они усложняют и без того сложную проблему контроля версий и добавляют больше уровней сложности.
Подмодули Git предоставляют альтернативное решение проблемы, которое лучше решать с помощью:
- использование некоторого менеджера пакетов (например, npm) для внешних зависимостей
- объединение нескольких репозиториев в один для внутренних зависимостей
Что дальше
Git имеет много запутанных аспектов, когда вы начинаете его использовать, но он становится намного проще, когда вы его понимаете. Если вы хотите узнать больше о Git, подпишитесь здесь, чтобы получать обновления о моем контенте, посвященном Git.
Первоначально опубликовано на https://how-to.dev.
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord . Заинтересованы в хакинге роста? Ознакомьтесь с разделом Схема.