Продолжаю совместно с вами постепенно изучать магию Git\GitHub.
Слово магия здесь применено не случайно - не иначе, как магией возможности Git\GitHub не назовешь. По крайней мере, я впечатлен этими возможностями. Другое дело, что процесс изучения Git у меня лично идет как-то тяжеловато. Ну, это не страшно - главное, не останавливаться!
В этом разделе я попытаюсь осветить для себя (и возможно, для вас, уважаемый читатель) вопрос создания ветвей (branches) в Git, перемещение между ветвями (branches), слияние (merge) ветвей. Этот вопрос очень подробно и хорошо описан на странице официальной документации - “Git Branching - Basic Branching and Merging”. Здесь я попробую самостоятельно описать данный вопрос.
Инициализация Git-репозитория
Создаю тестовую директорию
, в которой будут производиться эксперименты по созданию ветвей в Git. Внутри этой директории создаю два файла - индексный файл и файл таблиц стилей. А затем инициализирую Git-репозиторий, добавляю созданные файлы под версионный контроль Git:1
git_branches
Обратите на строку
в выводе команды 1
On branch master
. Это не пустой набор служебной информации - здесь говориться о том, что в ветви 1
git status
нечего фиксировать и рабочая директория чистая.1
master
Итак, мы уже кое-что узнали. А именно - при инициализации Git-репозитория была автоматически создана ветвь (branch) по имени
. И на данный момент мы находимся в этой ветви.1
master
Конечно, на самом деле это пока мало о чем говорит, так как не с чем сравнивать. Поэтому давайте я немного отредактирую оба файла
и 1
index.html
, проиндексирую\зафиксирую их.1
style.css
В браузере примерный вид странички будет выглядеть таким образом:
Git - создание новой ветви (branch)
В системе Git (как уже упоминалось ранее) имеется механизм ветвления (branches). Попробую на словах объяснить, что он из себя представляет.
Допустим, в моем текущем проекте, у которого имеются два файла, нужно внести кардинальные изменения. Причем, изменения такого рода, что они могут нарушить работу уже существующего проекта. Чтобы обезопасить себя (подстраховать), создаю точную копию существующего проекта и перехожу в нее для дальнейшей работы.
Давайте я на практике осуществлю вышесказанные действия. Для этого создаю новую ветвь с произвольным именем
, которая на этом этапе будет точной копией ветви 1
second
:1
master
Строка
услужливо информирует, что меня автоматически “перебросило” во вновь ветвь 1
Switched to a new branch 'second'
. Можно проверить себя, набрав в консоли:1
second
Строка
говорит сама за себя.1
On branch second
Отлично! Теперь давайте я внесу некоторые изменения в файлы
и 1
index.html
и мы вместе посмотрим на результат в окне браузера. Изменения будут касаться добавления блока-обертки, еще нескольких параграфов и другой легкой стилизации.1
style.css
Не забуду также проиндексировать и зафиксировать внесенные изменения. Обратите внимание на вид команды -
. Эта команда является сокращенным вариантом двух команд: 1
git commit -a
и 1
git add
. Применяется, когда нужно “проскочить” этап индексирования и сразу зафиксировать изменения.1
git commit -m
Смотрим, что у нас получилось в окне браузера - то, что и ожидалось:
Git - переключение между ветвями (branches)
А теперь настал самый интересный момент. Как вы помните, мы сейчас находимся в ветви
. Давайте я переключусь в ветвь 1
second
и мы снова посмотрим в окно браузера:1
master
Оп! Мы видим старую картину - Git “запечатлел” тот момент, когда мы совершили переход из ветви
в ветвь 1
master
. Другими словами, мы вернулись в последнее зафиксированное состояние ветви 1
second
:1
master
Если я снова вернусь в ветку
и запущу команду просмотра логов Git, то коммитов окажется больше:1
second
Мне кажется, уже сейчас должно быть понятно, что такое ветви (branches) в Git и для чего они предназначены. На самом деле это действительно очень просто.
Git - слияние ветвей (branches)
В предыдущем шаге я создал ветвь
, в которую внес “рискованные” изменения, чтобы проверить, “оправдают” ли они себя. Изменениями я доволен и хотел бы добавить их в первоначальную ветку 1
second
, чтобы потом продолжить развитие проекта уже с этого места.1
master
Фактически, я хочу сделать слияние двух веток -
и 1
master
. Это сделать очень просто - для этого я перехожу в ветку 1
second
. То есть, я должен находиться в той ветке, в которую я вношу изменения из другой ветки. А затем произвожу само слияние:1
master
Команда слияния проста - я просто указываю имя той ветки (branch), которую хочу слить (merge) с текущей, в которой я нахожусь на данный момент.
При слиянии ветвей зачастую может возникнуть ситуация, когда происходит конфликт между двумя ветвями. Рассмотрение вопроса решения конфликтов при слиянии не рассматривается мною, так как на данный момент еще не освоил этот вопрос до конца.
Давайте снова “заглянем” в окно браузера - что он нам интересного покажет?
Показал он то, что и следовало показать - результат объединения двух ветвей
и 1
master
.1
second
Git - графическое представление ветвей (branches)
Система Git имеет в своем составе возможность графического представления ветвления в репозитории. Причем, такое представление можно сделать даже в консоли, с помощью псевдографики.
Это можно сделать, набрав в консоли команду:
На Stack Overflow я нашел примеры красивых изображений консоли с псевдографическим выводом команды
:1
git log
На самом деле вариантов использования команды
с ключом 1
git log
бесчисленное множество. Поэтому нужно выбирать именно то, что нужно и нравиться именно вам.1
--graph
Помимо псевдографики, ветви в Git можно визуализировать с помощью настоящего графического приложения. Под Mac OS X и Linux имеется достаточно большое количество таких приложений. Например, под Mac OS X это GitX, под Linux - Gitk или Gitg:
Git - удаление ветви (branch)
В разделе слияния ветвей в Git я научился процессу объединения двух ветвей в одну. Такой процесс в Git имеет название
(слияние). Теперь ветвь 1
merge
имеет в себе все, что есть и в ветви 1
master
. Поэтому ветвь 1
second
можно удалить.1
second
Выполняется это командой:
Посмотрим на вывод команды
:1
git hist
У меня осталась одна ветвь -
.1
master