В этой статье погружается в более продвинутые темы Git, предоставляя ценные советы и хитрости для использования Git в командной строке. Пройдя через конкретные примеры, вы станете более уверенно, работая над командной строкой, значительно увеличивая общую производительность в вашей повседневной работе.
Гит, безусловно, наиболее широко используемый бесплатный и открытый исходный код современной распределенной системы управления версиями (VCS), эффективный и заслуживающий доверия инструмент, который помогает отслеживать все изменения в исходном коде во время разработки программного обеспечения.
Это было первоначально разработано Линус Торвальдс В 2005 году для развития ядра Linux и со значительной помощью других разработчиков, таких как Юнио Хамано , это все еще активно поддерживается проект на Github Отказ С ранних этапов Git был разработан для обработки как небольших, так и очень крупных проектов со скоростью и эффективностью, а с тех пор он стал стандартным инструментом де-факто в своем роде.
Несмотря на его популярность, Git часто подвергается критике за трудности, прежде всего, из-за своей природы командной строки, которая усложняет для новых пользователей, чтобы узнать о всеми командами, и GIT должны предложить. Это главная причина, почему многие разработчики, вскоре после того, как он ввел в Git, начать поиск клиента GUI, убедил, что он сделает их быстрее и продуктивным. И это часто, по крайней мере, в начале, так как есть много современных сторонних инструментов, которые предлагают отличный пользовательский опыт и режущий кромки, такие как Github Desktop , SmartGit , Gitkraken или Git Tower , назвать несколько.
Проблема в том, что в долгосрочной перспективе вместо того, чтобы инвестировать свое время в изучение Git, разработчики становятся зависимыми от этих клиентов GUI и проваливаются несчастны в самый первый момент, когда они должны быстро действовать от командной строки, не имея правильного инструмента в их распоряжении. Именно поэтому всегда есть хорошая идея, чтобы забрать его один шаг за раз и сначала практиковать Git от командной строки, потому что со временем это заставит вас чувствовать себя более комфортно и уверенно, используя Git от терминала, значительно повышая производительность в вашем ежедневная работа. Другими словами, если вы хотите стать мастером Git, вам придется вернуться к основам и построить оттуда.
Одна из самых первых вещей, которые мы все, вероятно, использовали GIT, устанавливают наше имя и адрес электронной почты. Это ваш первый день на новой работе, и коллега, сидя рядом с вами, говорит вам, что лучший способ настроить Git, передавая --глобал
Вариант, например:
$ git config --global user.name "Your Name" $ git config --global user.email "your.email@example.com"
Если это был первый и последний раз, когда вы использовали config
Команда, есть шанс, что вы не знаете о том, что Git можно настроить на трех уровнях: Местный , глобальный и Система Отказ Поскольку «Local» — это опция по умолчанию, вам не нужно указывать --локал
При вызове Git Config.
Команда из вашего репозитория:
$ git config --local user.name "Your Name" $ git config user.email "your.email@example.com"
Эта команда создаст файл «Config» под вашим $ Repo/.git
каталог, после чего он будет иметь приоритет над --глобал
Установка для каждого значения его содержит.
Это становится чрезвычайно полезным, как только вы должны начать работать на 2 отдельных проектах, где одна из репозиториев требует, чтобы вы настроили вашу корпоративную электронную почту, а другой адрес электронной почты вашего клиента.
На практике это совершенно нормально, чтобы настроить большинство параметров GIT на глобальном уровне, но стоит вспомнить, что каждый уровень конфигурации GIT переопределяет значения в «верхнем» уровне: Местная> Глобальная> система
Глобальный уровень конфигурации обычно более подходит для создания псевдонимов, которые могут заменить определенные команды, которые часто используются, но являются длинными и громоздкими для типа. Например, Git’s Журнал
Команда предлагает много информации по умолчанию, но это может быть достаточно сложно получить обзор высокого уровня всех сообщений Commit, что мы обычно хотим. По этой причине большинство людей часто используют Git log
с некоторыми дополнительными вариантами, чтобы упростить вывод или ограничить количество результатов, например
$ git log --oneline -n10
Но мы можем сделать этот шаг дальше, а вместо того, чтобы постоянно печатать --oneline
Опция или ограничение количества результатов до 10, мы можем указать точную информацию, которую нам нужно по всему миру настроить HIST
Псевдоним, которые покажут нам последние 10 коммит, сопровождающиеся хорошим графиком:
$ git config --global alias.hist \ "log --graph --date=short --abbrev=10 \ --format='%C(yellow)%h %C(white)%ad %C(green)%s %C(cyan)[%an, %ar]%C(white)%d' \ -n10"
Я знаю, что это может сначала напугать вас, поэтому попробуйте удалить часть «формата» из команды, чтобы сделать его более читаемым.
Выполнение этой команды позволит нам использовать HIST
Псевдоним для отображения последних 10 коммит из истории Git. Мы можем даже переопределить количество отображаемых коммит, чтобы показать последние 20 коммитов, например:
$ git hist -n20
Переопределение определенных параметров, безусловно, полезно, но стоит отметить, что Git позволяет вам пропускать параметры псевдонимами:
$ git config --global alias.echo '!f() { text=${1-Hello World}; echo $text; }; f'
Опять же, приведенный выше пример может показаться запутанным вначале, но если вы сосредоточены только со стороны между кавычками, вы увидите, что мы определяем анонимную функцию, указав его тело между фигурными брендами, и мы тогда вызываем его. Индивидуальные команды разделены с запятой, и мы определили переменную «текст», который принимает первый параметр или по умолчанию для «Hello World», если параметр не был передан. Функция затем печатает значение переменной «текст» на консоль, используя стандартную систему команды эхо
Отказ
Как видите, это позволяет нам писать мощные функции, которые принимают один или несколько параметров, и используя команды GIT, так и на уровне ОС, вы можете легко создавать пользовательские плагины GIT, которые могут использоваться всей вашей командой для некоторых конкретных задач Отказ
Мы можем попробовать эту концепцию, определив Найти
Псевдоним, что позволит нам быстро искать конкретное сообщение обмена сообщениями, используя текст нечувствительности к регистру:
$ git config --global alias.find '!f() { \ text=${1}; \ results=${2-10}; \ git log --all --full-history --oneline -n$results \ -i --grep="$text"; \ }; f'
Теперь, используя следующую команду, мы можем искать все сообщения Commit, которые содержат конкретное слово, такие как «Refactor», ограничивающий выход до 5 результатов:
$ git find "refactor" 5
Одна из вещей, которые часто делают новичков неудобными (возможно, даже напуганы), одновременно используя GIT — это его тенденция отслеживать все изменения файла в репозитории. Другими словами, даже если вы только хотите компилировать проект, не модифицируя любой код, Git все еще собирается обнаружить все артефакты, произведенные после компиляции, и сообщить, что в вашем хранилище есть новые файлы.
Вручную удалять файлы или добавление их в .gitignore
Часто самое простое или быстрое решение, но если в вашем рабочем каталоге есть много случайных непередачных файлов, вы должны знать об следующей команде, которая помогает вам очистить грязное рабочее дерево:
$ git clean -f -d
В команде выше, параметр -f
Средства «силы», и она удалит любые неповторимые файлы, а также любые подкаталоги, которые становятся пустыми в результате.
Вы не должны беспокоиться о том, чтобы потерять какие-либо изменения в существующих файлах, они останутся неповрежденными. С другой стороны, в ситуации, когда вы хотели бы вернуть все изменения, выполняемые на отслеживаемых файлах, оставляя безвременные файлы, как они были, вы можете запустить:
$ git reset --hard HEAD
Вы можете опустить Голова
Потому что это подразумевается, и не обязательно использовать заглавные буквы. Наконец, если вы хотите отменить все ваши изменения, вы можете сбросить весь рабочий каталог в состояние последней коммиты, добавив все файлы в рабочем каталоге в область промежуточной площадки, а затем выполнить на них жесткий сброс:
$ git add . $ git reset --hard
Наличие опции «Отменить» в программном обеспечении является такая общая особенность в наши дни, что мы часто в конечном итоге потрясены, как только мы понимаем, что он недоступен. Ценные данные могут быть потеряны, и необратимый ущерб может быть сделан. Это одна из главных причин, по которым начинающие так сильно колеблются, когда кто-то просит их совершить их изменения в Git. Что, если они только что сделали огромную ошибку, и нет обратно?
Хорошая новость заключается в том, что вы можете вернуть ваши изменения даже после совершения их, так же, как вы можете вернуть все изменения в ваши отслеживаемые или неподанные файлы. Единственная разница в этот раз заключается в том, что вместо ссылки на последнее общение с использованием ГОЛОВА
, вы должны выполнить жесткий сброс до предыдущего фиксации, который можно будет ссылаться с использованием Голова ^
:
$ git reset --hard HEAD^
Существует более удобная нотация для ссылки на один или несколько коммитов, таких как Голова ~ 1
, Голова ~ 2
и т.п. Этот способ отмены изменений почти чувствует, что вы пилируете слои лука. Но что если, вместо того, чтобы полностью удалить слой, вы только хотите изменить (обновить) последний коммит? Вы можете отступить и повторно зафиксировать свои изменения, выполнив мягкий сброс до предыдущего коммитария:
$ git reset --soft HEAD~1
Аналогичный результат также может быть достигнут за счет изменений в предыдущий коммит. В ситуации, когда вы забываете добавить некоторые важные файлы в уже созданный вами коммит, или если есть некоторые изменения, которые логически относятся к предыдущему коммитуру, это лучший путь для изменения существующего фиксации, добавив эти изменения в постановку площадь, а затем совершив их, используя --Amend
вариант:
$ git add . $ git commit --amend
Git подскажет вам обновить старое сообщение Commit, после чего он заменит старый коммит с новым. Этот новый коммит также получит уникальный хэш в результате содержания как старых, так и новых изменений, поэтому важно отметить, что отмена или модификация вашей истории зафиксирования в порядке, если вы не опубликовали старую историю совершения Удаленный репозиторий.
В случае, если вы сделали, Git откажется от перезаписи истории совершения вашего удаленного репозитория и предупреждает вас, как только вы попытаетесь толкать новые изменения. На данный момент вы должны координировать с членами вашей команды, потому что некоторые из ваших коллег, возможно, уже привлекли ваши предыдущие изменения и начали работать над ними.
Вы можете себе представить, насколько проблематично это может стать, когда у вас есть большая команда разработчиков, способствующих тому же репозитории. Вот почему, в этих ситуациях, всегда лучше вернуть особый коммит, используя следующую команду:
$ git revert
Возврат Commit не изменит существующую историю фиксации — это создаст новый коммит на его вершине. Этот новый коммит будет выполнять полную противоположность всех изменениях, выполненных на ссылочных фиксации, поэтому он полностью безопасен, чтобы подтолкнуть его к вашему удаленному.
К настоящему времени вы уже должны чувствовать себя более комфортно, используя Git. По крайней мере, вы больше не должны бояться создавать новые коммиты, зная, насколько легко расстегнуть все ваши изменения. На самом деле, вы должны начать часто совершать чаще, потому что теперь вы знаете, что вы всегда можете сбросить или изменить коммит, но если вы выполняете жесткий сброс в любых незарегистрированных изменениях, они теряются для хорошего. На самом деле единственный способ, которым вы можете полностью потерять свои изменения в Git, не совершают их, потому что даже если вы выполняете жесткий сброс на Голова ~ 4
, вы всегда можете вернуться.
Это возможно, потому что Git сохраняет локальный журнал всего, что вы сделали в своем хранилище после клонирования его. Этот журнал называется «Refrug», и он позволяет видеть все действия, которые вы выполнили на определенной ветке, используя следующую команду:
$ git reflog
Если филиал не указан, Голова
подразумевается. Refrog также сохраняет заказ, в котором вы выполнили все действия, с Голова @ {0}
Быть самым последним, и Голова @ {1}
один до этого. Таким образом, даже если вы отмените последние 4, обмениваются жестким сбросом на Голова ~ 4
, вы всегда можете отменить этот шаг, выполнив жесткий сброс до Голова @ {1}
Отказ Более того, если вы выполняете жесткий сброс до Голова @ {1}
Еще раз, он снова будет удалить последние 4 коммита, потому что это было последнее действие, которое вы делали, прежде чем выполнить отмену. Использование Refrog
Для удаления ваших действий настолько удобна, что он просто заслуживает собственного псевдонима. Следующая команда создает псевдоним отменить
который выполняет жесткий сброс до предыдущего действия:
$ git config --global alias.undo '!f() { \ git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; \ }; f'
Теперь вы можете просто ввести Гит Отменить
всякий раз, когда у вас сложно сброс на определенный коммит.
Возможно, вы находитесь в ситуации, когда ваш товарищ разработчик не может выполнить быстрое исправление ошибки, потому что он/она в настоящее время находится на отдельной ветви, работает над определенной функцией, а текущие изменения кода полуфабрикаты и не готовы быть совершенным. Это подходящее время, чтобы представить их на Git Stash
Отказ Stashing принимает ваши модифицированные отслеживаемые файлы и устроили изменения и сохраняют его на стопку незавершенных изменений:
$ git stash save
Затем вы можете оформить заказ другую ветку, исправить ошибку, и повторно повторно повторно нанести свою очередную замену изменений в предыдущей ветви или где угодно Вы хотите использовать:
$ git stash apply stash@{0}
Для просмотра всех скрытых предметов, используйте Git Stash List
и применить и удалить новейший стук из стека, используйте Git Stash Pop
Отказ
Существует еще одна ситуация, которая может замедлить вас, и то есть, когда ваш код имеет зависимость от конкретного коммита, который был опубликован на удаленное репо. Единственная проблема заключается в том, что вы находитесь на отдельной ветви и не хотите объединить все изменения, которые пришли до и после этого. Вы можете легко решить эту проблему, используя Git вишня
характерная черта:
$ git cherry-pick
Это примет особый коммит, который существует на отдельной ветви и скопируйте его на вершину своей ветви. Это содержимое будет точно так же, как в оригинальном Commit, но у него будет отличное хэш SHA-1.
Копирование кода из других ветвей или слияние вашей ветви с другим можно часто привести к конфликтам слияния. Это происходит, когда оба ветка содержат коммиты, которые меняют один и тот же код.
Логично, Git попросит вас выбрать, какие изменения сохраняются. Самый простой способ разрешить конфликты — это сохранение ваших или их изменений:
$ git checkout --ours$ git checkout --theirs
Другой способ — вручную редактировать все файлы, которые были изменены обеими сторонами. Git имеет довольно неизвестную функцию под названием повторное использование, записанное разрешением (Rerere):
$ git config --global rerere.enabled true
Это позволяет вам спросить Git вспомнить, как вы решили конфликт на кусок, чтобы в следующий раз он видит тот же конфликт, GIT может автоматически решить его для вас.
Еще одним способом решения проблемы с конфликтами слияния является разрешение их в вашу ветку, прежде чем даже создать запрос на тягу. Гит тянуть --ребаз
Позволяет избежать создания обмена коммитатами, тем самым изготовление истории Git появляется линейной:
$ git pull origin develop --rebase
Призывая эту команду временно удалит ваши изменения кода и применяют последние изменения, которые были опубликованы в Развивать
Филиал, моделирующий сценарий, где вы только что создали новую ветку от последней Развивать
Отказ Затем один за другим он попытается добавить все свои комбиниты, останавливаясь, когда происходит конфликт слияния. После исправления потенциального конфликта вы должны продолжать процесс, набрав GIT REBASE --Континую
Отказ В конце концов, вы должны оказаться последними изменениями от «Разработки», а затем все ваши «без конфликтующие» коммиты.
Потянувшись с --rebase
Это такой общий рабочий процесс, который есть выделенная опция конфигурации для него:
$ git config --global branch.autosetuprebase always
Еще один способ переписывающей истории — использование интерактивной функции Git. Помимо прочего, это позволяет вам переименовать, переименовать, исправлять, падение или сквош комбиты из вашей локальной истории:
$ git rebase -i
Опять же, после исправления потенциального конфликта, просто запустите GIT REBASE --Континую
Отказ Также убедитесь, что не собирать уже опубликованную историю Commit, сделайте это только в ваших местных изменениях.
Git позволяет обеспечить качественное качество кода на вашем проекте, используя Git Hooks. Все крючки — скрипты, хранящиеся в .Гит/крючки
подкаталог хранилища Git. Вы можете использовать существующие образцы сценариев, удаляя суффикс «.sample» из их имени или написать свой собственный, такой как « http://git.io/validate-commit-msg ».
Гит-крючок из приведенного выше примера предупреждает вас, если ваше сообщение COMBING дольше составляет более 50 символов, и попросит вас изменить сообщение.
Другой пример может быть установлен на стороне бокового сервера, который запускается всякий раз, когда вы нажимаете код на удаленный REPO. Он прочитал все сообщения Commit, и автоматически разрешает определенную JIRA с помощью плагина всякий раз, когда он обнаруживает слово «Исправление», сопровождаемое числом JIRA. Стоит отметить, что клиентские крючки не скопированы, когда вы клонируете репозиторий. Если ваше намерение с этими сценариями состоит в том, чтобы обеспечить политику, вы, вероятно, захотите сделать это на стороне сервера.
Оригинал: «https://dev.to/goranvasic/using-git-on-the-command-line-1hl4»