За последние два-три года Git дорос до того, что стал неотъемлемой частью знаний почти каждого разработчика. Но даже при том условии, что Git пользуется такой известностью, все же есть большое количество команд, о которых практически никто не знает.
В этой статье я хочу продемонстрировать вам семь небольших команд, которые помогут вам стать более продуктивными и компетентными в отношении Git. Давайте начнем.
Поиск изменений в файле
Не так просто оставаться в курсе последних событий, особенно если над одним и тем же кодом работает большое количество людей.
Для того, чтобы определить, как (а также когда и кем) файл был изменен, вы можете воспользоваться старой доброй командой git log, но с небольшой особенностью:
$ git log --since="3 weeks" -p index.html
Флаг ‘-p' позволит вам увидеть фактические изменения как разницу между двумя версиями файла (а не только метаданные коммита). А флаг '--since' позволит вам сосредоточить свое внимание на последнем временном промежутке.
Отмена последнего коммита по последней моде
Иногда мы думаем, что уже полностью подготовили кучу изменений к фиксации, и вот мы их фиксируем, но сразу после мы вдруг понимаем, что поторопились.
Вы могли добавить не все изменения, могли попасть не в ту ветку или могло произойти что-нибудь еще – вариантов много…
Единственное, в чем мы можем быть уверены, то это в том, что мы хотим отменить этот последний коммит и вернуть наши изменения в нашу рабочую копию!
Мы можем воспользоваться командой git reset со специальным набором параметров:
$ git reset --mixed HEAD~1
Флаг '—mixed' гарантирует, что изменения, которые находятся в сбрасываемых коммитах, НЕ будут стерты. Они будут сохранены в рабочей копии как локальные изменения.
'HEAD~1' - это хороший способ указать на «коммит перед последним», а это именно то, что нам нужно, чтобы отменить самый последний коммит.
Поиск отличий в файле в другой ветке
После того, как вы внесли изменения в файл в одной функциональной ветке, вы можете сравнить его с тем, как он выглядит в другой. Приведет конкретный пример. Допустим…
- сейчас вы находитесь в ветке 'feature/login' и…
- хотите понять, как файл ‘myFile.txt’ здесь…
- отличается от своей версии в ветке ‘develop'.
Это можно сделать с помощью команды git diff со следующими параметрами:
$ git diff develop -- myFile.txt
После чего вы увидите аккуратно представленные, четкие различия между версиями файлов, глядя на которые вы сможете понять, как именно ваш файл отличается от его версии в другой ветке.
Использование «switch» вместо «checkout»
Команда checkout выполняет большое количество задач и имеет множество значений. Именно поэтому относительно недавно сообщество Git решило опубликовать новую команду: git switch. Как вы уже могли понять из ее названия, она была создана специально для того, чтобы переключаться между ветками:
$ git switch develop
Как вы можете видеть, в этой команде нет ничего сложного, и принцип ее применения похож на 'git checkout'. Но огромное преимущество команды 'switch’ перед командой ‘checkout’ заключается в том, что у нее НЕТ миллиона других значений и функций.
Так как это довольно новый член семейства команд Git, то стоит проверить, есть ли она в вашей установленной версии Git.
Переключение туда и обратно между двумя ветками
Бывают ситуации, когда необходимо постоянно переключаться между двумя ветками. Вместо того, чтобы каждый раз полностью писать имена веток, вы можете просто воспользоваться следующей сокращенной формой команды:
$ git switch -
Когда вы используете символ тире в качестве единственного параметра, команда ‘git swtich’ возьмет последнюю используемую ветку. Как мы уже говорили, это может пригодиться, когда вам нужно постоянно перемещаться между двумя ветками.
Использование «git restore» для отмены локальных изменений
Еще недавно, чтобы отменить локальные изменения, вам нужно было использовать какую-либо форму команд git checkout или git reset.
Но теперь у нас есть (относительно новая) команда git restore, которая была создана специально для этой цели. Это выгодно отличает ее от ‘’checkout’ и ‘reset’, так как у этих команд есть множество других назначений.
Ниже представлен краткий обзор самых функций команды ‘git restore’:
# Unstaging a file, but leaving its actual changes untouched
{ # Удаление файла из промежуточного хранения, но при это его фактические изменения остаются нетронутыми }
$ git restore --staged myFile.txt
# Discarding your local changes in a certain file
{ # Сброс ваших локальных изменений в определенном файле }
$ git restore myFile.txt
# Undoing all of the local changes in the working copy (be careful)
{ # Отмена всех локальных изменений в рабочей копии (будьте внимательны) }
$ git restore .
Восстановление прошлой версии файла
У команды git restore есть еще одна не менее полезная функция ‘--source’. С ее помощью вы можете с легкостью восстановить любую предыдущую версию какого-то конкретного файла:
$ git restore --source 6bcf266b index.html
Вам просто нужно указать хэш пересмотренной версии, которую вы хотите восстановить (и, разумеется, имя файла).
Если вы не можете найти нужную версию, и вам нужна помощь, то вы можете воспользоваться настольным клиентом Git, например, Tower. С такой функцией, как «File History» (История файлов), вы с легкостью сможете просмотреть изменения, которые произошли в определенном файле, и выбрать ту пересмотренную версию, которую хотите восстановить.
Откройте для себя возможности Git
Несмотря на то, что Git уже достаточно хорошо известен, все же большая часть его возможностей до сих пор скрыта от широкой публики. Конечно, вы сможете «выжить», имея в арсенале всего несколько команд, таких как commit, push и pull. Но это как управлять Феррари только на первой передаче!
Если вы готовы погрузиться чуть глубже в мир Git, то вы откроете для себя еще более мощные функции. И они смогут помочь вам не просто стать более продуктивным, но и, в конечном счете, стать лучшим разработчиком!