7 советов по повышению продуктивности работы с Git

0
366
views

Перевод статьи «Become a Git Ninja: 7 Productivity Tips».

Отмена изменений в Git
Photo by Brina Blum on Unsplash

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

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

Автодополнение команд Git в терминале

Большинство команд, применяемых при испльзовании Git, начинаются с ключевого слова git, за которым следует пробел и второе ключевое слово. Поскольку между этими двумя командами есть промежуток, терминал воспринимает их как два разных слова, а при таких условиях обычное автодополнение при помощи клавиши Tab не работает (по умолчанию).

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

cd ~
curl https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

Затем добавьте следующие строки в файл .bash_profile в вашей домашней директории.

if [ -f ~/.git-completion.bash ]; then
   . ~/.git-completion.bash
fi

Этот код ищет скрипт автодополнения в вашей домашней директории и, если он там есть, запускает его при каждом вашем входе в bash.

Локальное удаление ветки в удаленном репозитории

Работа с ветками на удаленном репозитории может быть довольно трудоемкой задачей. Но удалить ветку на удаленном репозитории можно довольно быстро, для этого используется команда push. Мы предполагаем, что у вас есть право записи в удаленном репозитории.

Чтобы удалить ветку branch_name из удаленного репозитория remote_name, запустите следующую команду. Действовать нужно осторожно, потому что это действие отменить нельзя.

git push remote_name :branch_name

Запустив эту команду, вы, в сущности, делаете отправку (push) пустой ветки в branch_name и таким образом полностью удаляете branch_name из remote_name.

Безопасный принудительный push

Если вы переместили коммиты в своей локальной ветке или как-то еще изменили историю, ваш push в удаленный репозиторий будет отклонен. Обойти это можно, добавив к команде опцию —force, в результате чего будет перезаписана история удаленной ветки. Но это опасная процедура, поскольку со времени вашего последнего pull-а кто-то другой мог сделать коммит, а при таком подходе вы его перезапишете.

Более безопасный способ использования принудительного push это добавление опции —force-with-lease. Если с тех пор как вы последний раз забирали изменения из удаленного репозитория никто другой не вносил никаких новых изменений, эта команда будет действовать так же, как и с опцией —force. Но во всех других случаях ваш push будет отклонен. Отклоненный push даст вам понять, что, прежде чем снова пытаться отсылать ваши изменения, вам нужно обновить вашу локальную ветку (чтобы привести ее в соответствие с удаленной).

Отмена изменений в Git
Photo by Yancy Min on Unsplash

Отмена изменений в Git

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

Чтобы отменить процесс отслеживания файла при помощи Git, выполните следующую команду:

git rm --cached added_file

Чтобы отменить изменения, внесенные в файл после последнего коммита, и проиндексированные, запустите команду:

git reset HEAD staged_file

Эта команда восстанавливает состояние файла staged_file по указателю HEAD, который указывает на последний коммит. А если вы уже успели сделать commit своих изменений, следующая команда поможет вам вернуться на предыдущую стадию.

git reset --soft HEAD~N

Эта команда возвращает состояние репозитория на N коммитов до HEAD. Все изменения будут проиндексированы, то есть, эта команда не затронет изменения в ваших файлах. Сбрасывая коммит, вы будете возвращать назад состояние всего репозитория, сделать это для отдельного файла не получится.

Сохранение незафиксированных изменений при помощи «тайников»

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

Поможет вам git stash. Следующая команда сохраняет («прячет», англ stash — «прятать, утаивать, тайник») все незавершенные изменения и возвращается к состоянию репозитория на момент последнего коммита.

git stash

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

git stash list

Вы увидите список всех сохраненных тайников с метками времени. При помощи следующей команды можно применить N-й тайник из списка.

git stash apply stash@{N}

Коммит отдельных изменений в файле

Что, если вы внесли в файл много разных изменений, но хотите, чтобы они были зафиксированы в разных коммитах? Обычная команда git add проиндексировала бы все изменения в файле, но если вы добавите опцию -р, вы запустите wizard, позволяющий проиндексировать изменения в файле выборочным образом.

git add -p

Работа с большими файлами при помощи Git LFS

Хотя Git хорошо справляется с текстовыми файлами, ему не удается эффективно работать с бинарными. Примерами таких файлов могут послужить документы Excel, проекты Photoshop и прочие исполняемые файлы.

Здесь вам поможет Git LFS. Это расширение Git с открытым исходным кодом. Для работы с большими бинарными файлами оно заменяет эти файлы на текстовые указатели внутри Git, а содержимое файлов сохраняется на удаленном сервере. Таким образом вы сможете эффективно управлять репозиторием, а большими бинарными файлами (при внесении в них изменений) будет заниматься удаленный сервер.

Скачав и установив Git LFS в свою локальную систему, инициализируйте его для каждого репозитория при помощи следующей команды.

git lfs install

Чтобы отслеживать файлы определенного типа (скажем, PSD), запустите следующую команду:

git lfs track "*.psd"

Вы можете отслеживать и другие файлы, отредактировав файл .gitattributes.

Бонусный совет: отладка при помощи Git

Поскольку вы дотянули до конца статьи, вот вам бонусный совет!

Вы знаете, что Git — весьма полезный инструмент при дебаггинге вашей кодовой базы? Git Blame позволяет анализировать историю файла, а команда Bisect инициирует бинарный поиск по вашим коммитам. Узнать больше об этих командах можно здесь.

Итоги

Вот мы и подошли к концу нашего списка. Мы рассмотрели семь советов (плюс бонусный), следование которым поможет вам повысить эффективность работы с Git. Внедрите эти команды в свой рабочий процесс и пользуйтесь всеми преимуществами, которые они дают.

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here