Если до этого момента вы были разработчиком-одиночкой, возможно, вы даже не думали о необходимости использовать git. Однако при работе в команде вам обязательно понадобится инструмент для управления работой нескольких разработчиков в рамках одного проекта. Здесь на помощь приходит git, поскольку он позволяет вам отслеживать версию вашего приложения и координировать работу между вами и другими членами вашей команды.
Что такое Git?
Git - это система контроля версий, в частности, DVCS (распределенная система контроля версий). С помощью git вы можете зафиксировать свою работу в онлайн-репозитории. Затем ваши коллеги могут клонировать ваш репозиторий, разветвляться от него, объединяться с вашей веткой и многое другое. Git делает все это, сохраняя при этом отличную производительность, что делает его самой популярной современной системой управления версиями на сегодняшний день.
Как пользоваться Git?
А теперь перейдем к самому интересному. Чтобы использовать git, вам сначала нужно установить его. Установка git отличается в каждой операционной системе, поэтому просмотрите веб-сайт здесь и найдите руководство, наиболее подходящее для вашей личной ОС.
После его установки мы можем начать использовать git. Создайте каталог, перейдите в этот каталог с помощью командной строки или оболочки и введите:
git init
Эта команда создает пустой репозиторий git в текущем каталоге, в котором вы находитесь.
Затем давайте создадим файл в этом каталоге. Чтобы упростить задачу, давайте создадим простой текстовый файл с именем «file.txt», например:
Не стесняйтесь вводить в этот файл все, что хотите. Но теперь наше хранилище уже не так пусто. Так как же заставить git отслеживать это изменение? Мы просто набираем в командной строке:
git add .
Это добавляет в индекс все вновь созданные файлы. Индекс содержит снимок следующей фиксации. Говоря о фиксации, давайте сделаем это с помощью:
git commit -m [COMMIT_MESSAGE]
Вы можете добавить любое сообщение в COMMIT_MESSAGE, просто убедитесь, что оно описывает вашу текущую фиксацию.
Например, поскольку мы только что добавили файл file.txt, наше сообщение фиксации может быть «Добавлен файл.txt», поэтому наша команда будет выглядеть следующим образом:
git commit -m "Added file.txt"
Вот и все! Вы зафиксировали последнее изменение своего «проекта» в репозитории git.
Однако это только в вашем локальном репозитории. Как мы можем создать онлайн-репозиторий, который также будет отслеживать наш маленький проект здесь?
Удаленный репозиторий Git
Я рекомендую два популярных веб-репозитория git. Это GitHub и GitLab. Если вы еще этого не сделали, создайте учетную запись на любом из двух веб-сайтов.
После этого вам нужно будет создать новый репозиторий, не стесняйтесь давать ему любое имя, которое хотите. Если вы закончили с этим, скопируйте ссылку HTTP, которая должна быть в правом верхнем углу вашего репозитория, например:
В зависимости от того, пуст ли ваш репозиторий, его также можно найти под кнопкой кода, например:
Затем в локальном репозитории еще раз откройте командную строку и введите:
git remote add origin [LINK_TO_REPOSITORY]
Это добавляет наш веб-репозиторий в качестве удаленного репозитория и называет его origin. Наконец, в командной строке введите:
git push origin master
Теперь это перемещает наш локальный репозиторий в исходный удаленный репозиторий, который является веб-репозиторием, который мы создали.
Теперь, если вы обновите свой репозиторий, вы должны увидеть файл «file.txt», который мы создали на нашем локальном компьютере. Отличная работа!
Разветвление
По нашей последней команде, которая была:
git push origin master
Вам может быть интересно, что такое «мастер». Мастер - это ветка в нашем репозитории, это первая ветка по умолчанию, созданная, когда мы инициализировали наш репозиторий в самом начале.
Так что, если мы хотим создать еще одну ветку, скажем, по одной ветке для каждого разработчика в нашей команде?
Мы можем сделать это с помощью команды:
git checkout -b [BRANCH_NAME]
Не стесняйтесь давать своей ветке любое имя, которое хотите, вы также можете назвать ветку своим именем, если хотите. Я назову свою ветку «Луч», поэтому моя команда будет такой:
git checkout -b Ray
Если вы хотите вернуться в основную ветку, вы можете просто ввести:
git checkout master
Правильно, флаг «-b» в команде оформления заказа предназначен для создания новой ветки. Если вы не добавите флаг -b, вы просто переключитесь на другую ветку (если она существует).
Вы можете проверить, в какой ветке вы находитесь, набрав:
git branch
Апостроф на master означает, что я сейчас нахожусь в ветке master. А пока вернемся к новой ветке, которую мы только что создали.
Теперь давайте добавим что-нибудь новое в нашу текущую ветку. Вы можете создать новый файл или просто добавить текст в наш файл file.txt.
После этого нам нужно повторить предыдущую процедуру фиксации в нашем локальном репозитории, набрав:
git add .
А также
git commit -m [COMMIT_MESSAGE]
Наконец, давайте поместим нашу фиксацию в наш удаленный репозиторий, набрав:
git push origin [BRANCH_NAME]
А теперь, если вы переключаете ветки в своем репозитории, нажимая кнопку следующим образом:
Вы должны увидеть свой последний коммит из новой ветки. Затем давайте вернемся к нашей основной ветке в нашем локальном репозитории, набрав:
git checkout master
А затем вытащите из нашей новой ветки, набрав:
git pull origin [BRANCH_NAME]
Теперь в нашей локальной основной ветке у нас есть новые изменения, которые ранее были доступны только в нашей другой ветке.
В качестве альтернативы мы также могли бы объединить нашу ветку с главной ветвью, сначала переключившись на главную ветку и набрав:
git merge [BRANCH_NAME]
Если мы это сделаем, нам не нужно будет отправлять и извлекать данные из нашей ветки в удаленный репозиторий.
Вернуть и записать
Допустим, самая последняя фиксация из другой нашей ветки проблематична. Это может вызвать ошибки в нашей основной ветке после извлечения, или, может быть, нам просто не нравятся недавние изменения, сделанные в другой ветке.
Здесь на помощь приходит контроль версий в git. Если вы помните, в самом начале я сказал, что git отслеживает версии нашего приложения.
Мы можем просмотреть все версии или коммиты, набрав:
git log
Результат должен быть похож на этот:
Выглядит сложно? Давайте обсудим каждую часть по очереди:
Желтый текст - это ваш идентификатор фиксации, он понадобится вам позже для того, что мы собираемся делать. Ниже вы, автор. Тогда информация под вами - время и дата этого коммита. Наконец, в самом низу находится сообщение о фиксации.
Теперь, когда мы разобрались с журналами, давайте вернемся к нашей цели - избавиться от последней фиксации и вернуться к предыдущей.
Во-первых, обратите внимание на идентификатор фиксации, который мы хотим вернуть, и скопируйте его. В моем случае это фиксация с сообщением «Добавлен текст в file.txt», а идентификатор фиксации:
a9dccd563efa30e2c328d511f0080f91b75d669e
Наконец, вставьте его в команду:
git revert [COMMIT_ID]
Что делает команда возврата? По сути, он создает «зеркало» текущего коммита.
Итак, если вы добавили файл, он удалил бы его, если вы удалили файл, он добавил бы его и так далее. В некотором смысле он отменяет фиксацию на предыдущую.
Если при возврате возникла проблема, просто введите:
git status
И решить вопрос. Обычно способ решения проблемы состоит в том, чтобы удалить или добавить файлы, чтобы можно было выполнить возврат.
Другие команды
Хотя команд, которые мы обсудили, должно быть более чем достаточно, чтобы вы начали использовать git, есть и другие команды, о которых вам следует знать.
- git clone
Если у вас или ваших коллег уже есть непустой удаленный репозиторий, и вы хотите получить все данные (вместе с удаленным источником) этого репозитория, вы можете использовать этот метод.
Синтаксис этой команды:
git clone [LINK_TO_REPOSITORY]
2. git rebase
Подобно слиянию с точки зрения его цели. Rebase - это способ перемотать вашу ветку в другую ветку. Используя перебазирование вместо слияния, мы можем добиться более «линейного» ветвления. См. Иллюстрацию ниже:
Не знакомы с приведенной выше иллюстрацией? Это визуализация ветвей git, мы делаем это для того, чтобы понять, как наши коммиты и ветки выглядят и ведут себя в git.
Если вы хотите поиграть с визуализацией веток git, вы можете посетить веб-сайт здесь для более интерактивного обучения.
Синтаксис rebase:
git rebase [BRANCH_NAME]
3. git stash
Команда stash используется для сохранения незафиксированных изменений во временной памяти git. Для git stash есть несколько основных команд:
а. git stash сохранить
Сохранит изменения во временную память. Синтаксис этой команды:
git stash save [STASH_NAME]
Где STASH_NAME может быть чем угодно.
б. git список тайников
Отображает список сохраненных тайников. Команда проста:
git stash list
c. git stash pop
Удаляет самый верхний тайник из временной памяти и добавляет его обратно в проект. Команда такая:
git stash pop
d. git stash применить
Возвращает определенный тайник в проект, не удаляя его из временной памяти. Синтаксис этой команды:
git stash apply [STASH_NAME_AND_ID]
Вы можете увидеть имя и идентификатор тайника, используя команду git stash list.
Заключение
Как разработчику в наши дни, почти наверняка необходимо научиться использовать git. Практически все компании и программные проекты используют его, поскольку это самый быстрый и эффективный инструмент для координации программных проектов между членами команды.
Надеемся, что благодаря знаниям, полученным в этой статье, вы сможете начать использовать git в своих проектах и стать профессиональным разработчиком в наши дни.
[1]: https://git-scm.com/docs/user-manual
[2]: https://www.atlassian.com/git/tutorials/merging-vs-rebasing