Экономьте часы каждый день с помощью этих Git-скриптов

Git — одновременно лучший друг каждого разработчика и его злейший враг. Удивительно видеть, как много разработчиков борются с Git, даже если мы используем его ежедневно. Git нелегко освоить; Вот почему так много продуктов, таких как Github Desktop, GitKraken и другие, помогают визуализировать управление системой контроля версий. Но даже тогда некоторые из нас все еще борются с перебазированием. Здесь я покажу вам, как легко выполнять перебазирование с помощью Git CLI и разрешать конфликты слияния в вашей любимой среде IDE.

Что такое ребаза?

Я уверен, что вы прочитали все о том, что такое rebase, и о различиях между rebase и merge. У меня нет сложных диаграмм, чтобы показать вам (потому что я не думаю, что они нужны). Итак, вот все, что вам нужно знать:

Команды rebase и merge — это способ объединить вашу работу и чужую работу (или вашу работу из другого времени). Разница в том, что когда вы объединяете свою ветку функций с веткой «разработка» или «основная», вы объединяете все изменения из общей ветки в свою ветку функций. В то время как rebase отложит вашу работу, обновит вашу ветку с последними изменениями в общей ветке, а затем вернет вашу работу, оба могут привести к конфликтам, если в одних и тех же файлах есть изменения. Вот где это сбивает с толку большинство людей. Позвольте мне показать вам, как эффективно разрешать конфликты слияния, не нарушая ваш код. Совет: вам не нужно хранить копии своей работы и вручную добавлять изменения в новую ветку 😉

1. Настройте пульты

При работе над проектом с несколькими разработчиками. Лучше разветвить репозиторий, чем работать на том же удаленном. Это сделано для предотвращения конфликтов имен веток и случайного помещения вашего кода разработки в общую ветку. Обычно у меня есть origin пульт в качестве вилки и upstream в качестве общего пульта.

git remote add origin [personal_fork_url]
git remote add upstream [shared_remote_url]

2. Настройте git mergetool

git mergetool — это инструмент командной строки, который помогает нам разрешать конфликты слияния в терминале. Выполнение этой команды откроет файл, который необходимо разрешить в редакторе кода при наличии конфликтов. По умолчанию используется vim, но мы более изощренны. Давайте настроим его для использования нашей любимой IDE, VS Code.

Откройте файл конфигурации git

git config --global --edit

Добавьте VS Code в качестве редактора инструментов слияния

[merge]
  tool = vscode
[mergetool "vscode"]
  cmd = code --wait $MERGED

3. Повторная синхронизация Git

Перед перебазированием с помощью общей ветки вы должны сначала получить последние изменения из этой ветки. Назовем эту общую ветку develop. Некоторым нравится звонить по номеру git pull, но мне нравится звонить по номеру git reset, чтобы узнать последние изменения. Сбросив исходную ветку, мы отменим все наши локальные изменения и обновим нашу локальную ветку, чтобы она имела тот же код, что и восходящая ветка. Это поможет нам избежать любых потенциальных конфликтов слияния и дополнительной фиксации для слияния кода, если это необходимо. Для этого я написал следующий скрипт git resync. Этот сценарий извлечет последние изменения с пультов origin и upstream и сбросит ветку, в которой вы находитесь, с помощью ветки upstream.

Давайте сохраним этот скрипт в обычном месте, например. ~/git-custom-commands. Затем нам нужно дать сценарию разрешение на выполнение как bash-скрипт.

cd ~/git-custom-commands
chmod 777 git-resync

Чтобы запустить его как команду git, нам нужно добавить папку в PATH, и мы можем сделать это, добавив эту строку в ваш файл .zshrc или .bashrc.

export PATH=$PATH:/Users/[your_username]/Helpers/git-custom-commands

На этом этапе вы сможете перейти к проекту git и запустить git resync.

4. Соберите все вместе

Барабанная дробь, пожалуйста… Момент, которого мы все ждали! (Сике!)

Прежде чем мы углубимся, давайте вспомним, что мы уже настроили:

  • Настройте удаленное происхождение git (личная вилка) и восходящий поток (общая вилка)
  • Настройте git mergetool для использования VS Code в качестве нашего текстового редактора.
  • Настройте git resync скрипт

Теперь давайте заставим наши инструменты работать. Вот процедуры, которым вы должны следовать, чтобы перебазировать вашу последнюю общую ветку (develop) в вашу функциональную ветку (feat/medium):

  1. git checkout develop
  2. git resync
  3. git checkout feat/medium
  4. git rebase develop
  5. Сделанный! (Если нет конфликтов слияния)

Если есть конфликты слияния, вы должны запустить git mergetool, это откроет VS Code и файл, содержащий конфликт. Вы бы разрешили конфликт в VS Code, сохранили и закрыли файл. Если есть несколько файлов с конфликтами, git mergetool будет открывать их один за другим, пока вы не разрешите все конфликты.

5. Нажмите перебазированный код

После того, как вы закончили перебазировать свой код, вам нужно принудительно отправить код в удаленную ветку с флагом -f.

git push origin feat/medium -f

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

Заключение

Я думал, что эта статья будет наполовину короче, но она напомнила мне, насколько на самом деле сложен Git. Я надеюсь, что описанная выше техника поможет вам преодолеть страх перед Git rebase и Git в целом. Пожалуйста, не стесняйтесь обращаться, если у вас есть какие-либо вопросы!

Не Гит получил. Получить. 🚀

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Посетите наш Community Discord и присоединитесь к нашему Коллективу талантов.