В этой статье мы обсудим разные Git-команды, которые могут оказаться полезными для разработчика или специалиста по Big Data. Вы узнаете, как проверять, удалять и приводить код в порядок. А еще рассмотрим способы выхода из Vim и экономию времени с помощью псевдонимов Bash и конфигурации редактора Git.
Skillbox рекомендует: Практический курс «Мобильный разработчик PRO».
Напоминаем: для всех читателей «Хабра» — скидка 10 000 рублей при записи на любой курс Skillbox по промокоду «Хабр».
Проверяем все и вся
- git diff— Посмотреть все изменения файла локально. При указании имени файла изменения будут показаны только для него.
- git log?—? Просмотреть историю коммита. Может также использоваться для файла с git log -p my_file. Введите q, чтобы выйти.
- git blame my_file — Просмотреть, кто, что и когда изменил в my_file.
- git reflog?—? Показать журнал изменений в заголовке локального репозитория. Отличный вариант для поиска утраченных данных.
Эти команды позволяют быстро проверить все, что нужно, без всяких проблем. Если что-то не так, Git дает большое количество возможностей для удаления или отката коммитов и изменений в файлах.
Вернуть, как было
- git reset, git checkout и git revert — команды, которые используются, чтобы отменить какие-либо действия. Но они не такие и простые, с ними надо уметь обращаться.
- git reset, git checkout могут использоваться как для коммитов, так и для обычных файлов.
- git revert используется только для работы с коммитами.
Если вы работаете с собственными локальными коммитами, которые никак не связаны с командной работой, можно без проблем использовать все перечисленные команды.
Если вы работаете в коллективе и коммиты общие, тогда ваш выбор — git revert.
У каждой команды есть целый набор опций. Вот наиболее употребляемые:
git reset --hard HEAD — отмена проиндексированных и непроиндексированных изменений с момента последнего коммита.
Указываем вместо HEAD определенный коммит, чтобы отменить изменения, произошедшие после него. --hard отбрасываются оба типа изменений, о которых говорилось выше.
Не забывайте убедиться в том, что вы не отменяете коммит из удаленной ветки, от которой зависят другие члены команды.
git checkout my_commit — отмена изменений my_commit.
HEAD часто используется для my_commit, чтобы отменить изменения в вашем локальном рабочем каталоге с момента последней фиксации.
checkout лучше всего использовать для локальных отмен. В этом случае коммиты из удаленной ветки, от которой зависят ваши коллеги, не будут затронуты!
Если вы используете checkout с веткой вместо коммита, HEAD переключается на указанную ветвь, а рабочий каталог обновляется для соответствия изменениям. Это самое распространенное использование этой команды.
git revert my_commit — отмена последствий изменений в my_commit. revert выполняет новый коммит после отмены изменений.
revert безопасен для общих проектов, поскольку команда не перезаписывает изменения, от которых могут зависеть другие ветки.
Иногда вы просто хотите удалить неотслеживаемые файлы в вашем локальном каталоге. К примеру, запустив какой-то код, который создал много разных типов файлов, которые вам не нужны. К сожалению. Clean поможет мгновенно удалить их!
git clean -n — удаление неотслеживаемых файлов в локальной рабочей директории.
-n — флаг для пробного запуска, ничего не удаляется.
-f — флаг для удаления файлов.
-d — флаг для удаления неотслеживаемых директорий.
По умолчанию неотслеживаемые файлы .gitignore не будут удалены, но это можно изменить.
Наводим порядки
git commit --amend — добавляем поэтапные изменения в последний коммит.
Если ничего не проиндексировано, команда позволяет вам редактировать последнее сообщение коммита. Используйте команду только в том случае, если коммит не был объединен с удаленной master-веткой.
git push my_remote --tags — отправка локальных тэгов в удаленный репозиторий. Хороший вариант для присвоения версий изменениям.
Помогите, я застрял в Vim и не могу выбраться!
Git в некоторых случаях открывает сессию редактора Vim. И если вы не слишком хорошо знакомы с ним, то можете оказаться в затруднительной ситуации. Да и не только вы — к примеру, на Stack Overflow более 4 тысяч пользователей хотят знать, как выбраться из Vim.
Вот четырехэтапный план, который поможет закрыть Vim и сохранить изменения:
- Нажимаем i.
- Вводим сообщение коммита в первой строке.
- Esc.
- Вводим :x.
Все, вы свободны!
Изменяем редактор по умолчанию.
Вы можете избавиться от Vim совсем, если смените редактор по умолчанию. Вот команды для работы с популярными редакторами. Пример выбора другого редактора, в нашем случае Atom:
git config --global core.editor «atom --wait»
Ярлыки для команд Git
А вот способ, который позволяет добавлять ярлыки для Git-команд, для вашего .bash_profile.
alias gs='git status '
alias ga='git add '
alias gaa='git add -A '
alias gb='git branch '
alias gc='git commit '
alias gcm='git commit -m '
alias go='git checkout '
Больше информации о .bash_profile можно получить здесь.
Что касается способа, приведенного выше, то теперь вы можете использовать gs вместо git status.
Собственно, это все на сегодня. Если есть возможность, укажите в комментариях, какие Git-команды используете вы и почему.
Skillbox рекомендует:
- Двухлетний практический курс «Я — веб-разработчик PRO».
- Онлайн-курс «С#-разработчик с 0».
- Практический годовой курс «PHP-разработчик с 0 до PRO».
Комментарии (22)
JTG
01.03.2019 16:36+11Отвратительная статья. Если бы я не умел работать с git, ничего бы не понял. Даже хуже, после этой статьи:
— У меня есть изменённые файлы, но git diff ничего не показывает ;( Что ещё за staging area?
— Я сделал git reset --hard и всё пропало!
— "#1234 foo" и «Revert „#1234 foo“» потому что «работаю в коллективе и коммиты общие, мой выбор — git revert».
— git commit --amend не работает! Но ведь я читал статью, мой коммит не был объединен с удаленной master-веткой! Я же пушил его только в develop!fireSparrow
01.03.2019 17:20+1Так нигде и не сказано, что это вводная статья для чайников.
Статья называется «10 Git-команд, которые стоит знать разработчику». И то, что обещает название, в тексте полностью раскрыто.JTG
01.03.2019 17:48+4Тогда выходит, что для чайников эта статья вредна, а для не-чайников — бесполезна. Нпример, под заголовком «наводим порядки» ожидаешь увидеть что-то про rebase, а не «как запушить метку» (при этом как поставить эту-самую метку — не уточняется).
То же самое с
Не забывайте убедиться в том, что вы не отменяете коммит из удаленной ветки, от которой зависят другие члены команды.
Убедиться при помощи телепатии. Про «git branch -r --contains» разработчику, видимо, знать не стоит. Спасибо, Jeff Hale, очень полезная статья!
fireSparrow
01.03.2019 18:01Это просто шпаргалка.
Если она ничего нового вам не сообщила — то просто поищите другие материалы по гиту. Есть пользователи, которые посчитали её полезной для себя, если судить по оценкам.
usego
01.03.2019 16:46-4Оно всё надо при пользовании Source Tree? До сих пор в командной строке использую максимум 5 команд и то нечасто. Всё остальное на много удобнее в UI смотреть и делать.
nick_gabpe
01.03.2019 19:04+2Вопрос "How to exit vim?" имеет всего 4193 «голоса за», а вот просматривается гораздо чаще viewed 1,853,728. Так что скорее не 4 тысячи, а почти 2 миллиона человек :)
vyo
01.03.2019 19:19+3Полному нубу — бесполезно. Новичку — вредно. Немного попользовавшемуся гитом — снова бесполезно.
Даже не знаю, на кого статья ориентирована. Сам гит освоил по чему-то вроде офф. мануала, а дальше — StackOverflow (не забывая читать непринятые ответы, конечно).
AnROm
01.03.2019 22:04+2И еще одна очередная статья про N Git-команд, которые нужно знать разработчику
KvanTTT
02.03.2019 00:58+1Чтобы не использовать ярлыки для команд Git, можно просто использовать GUI. Команды вводить не придется, да и работать так более наглядно.
immaculate
02.03.2019 04:52-1Я не понимаю, зачем нужен GUI для Git. Когда-то поставил GitKraken, помучился пару дней, и снес.
Git — из категории настолько мощных инструментов, для которых GUI скорее помеха, чем помощь. И наделать проблем проще скорее из GUI, чем из командной строки.
По опыту, который есть у меня, GUI пользуются только те, кто сумел освоить лишь
pull/commit/push
и ничего более (https://xkcd.com/1597/). И в случае любой реальной проблемы (даже проблемки), эти люди беспомощны. И их все время приходится водить за руку объясняя даже такие элементарные вещи, как правильно называть ветки.
Как только человек учится пользоваться git в полной мере, он уже переходит в командную строку. Есть множество ситуаций в жизни, которые никак не могут быть предусмотрены заранее создателями любого GUI. Во многих GUI инструментах даже rebase сделать сложно (требуются минуты времени и десятки кликов мыши), тогда как в командной строке достаточно написать
git rebase -i HEAD~3
.gturk
02.03.2019 12:32+1В гуе гораздо удобнее перед комитом ещё раз критическим взглядом посмотреть на то то что ты там наколбасил и точечно отменить непонравившиеся куски.
Да и вобще для каждодневной работы, лично мне, удобнее гуй — набивать руками имена файлов и веток сомнительное удовольствие. Ну а если нужно хотябы заребейзиться или что-то более экзотичное, то да, там уже в консоль.
Плюс гуй всётаки сглаживает кривую обученияDanik-ik
02.03.2019 14:23Пользуюсь Смартгитом, плачу деньги (так как для работы). За пару лет единственное, что не смог в нём сделать — какую-то экзотику вроде мержа поддеревьев без общего корня. Всегда вижу, какая команда выполняется в результате моего действия (помогает понимать и автоматизировать). Классные дифф, редактор индекса (трёхоконный), конфликт резолвер. Прекрасное, наглядное представление всего, что надо. Они достигли уровня, когда инструмент намного больше помогает, чем мешает.
А Кракена тоже снёс в тот же день, как поставил — кажется, он посмел сыпаться с ошибками. Хотя картинка у него красивая, да...
Кажется, важно не только gui или cli, но и то, что это конкретно за gui — то ли для тех, кто ничего на хочет видеть лишнего, то ли для тех, кто хочет повысить свою эффективность, не теряя при этом контроля за процессом. И для самостоятельного обучения, к примеру, наглядный результат — вообще очень полезная вещь.
KvanTTT
03.03.2019 03:22Ну а если нужно хотябы заребейзиться
Это как раз тоже удобней делать через GUI. Ну во всяком случае GitExtensions поддерживает.
SVlad
02.03.2019 19:01Собственный git gui самого гита вполне удобен для повседневной работы.
Он наглядно показывает изменения в рабочей области, в staging и дерево коммитов.
Ну и некоторые частые команды там проще, чем в консоли. Например, есть отдельная команда revert для файлов, и для строк в файлах.
ivan_suroegin
02.03.2019 15:12А зачем пробелы перед закрывающимися кавычками в ярлыках для команд Git?
При наборе, например,
ga .
перед точкой будет два пробела, это пофиг, согласен, отработает как надо, но это немного странно, мне кажется.
ilyapirogov
git stash
— отложить все текущие изменения в локальное хранилищеgit stash pop
— забрать последние сохраненные изменения из хранилищаПолезно если вы не хотите пока комитить код, но вам срочно нужно переключится на другую ветку.
Graf54r
помню я как то думал что если переключится на другую ветку, то в этой все останется также, а комитить я часто не любил. Эх…
SVlad
Всегда в таких случаях делаю commit, озаглавленный WIP — нагляднее и не забудешь. Потом просто делаю amend.
stash скорее нужен для упрощённого rebase между ветками.