Предыдущий ролик Следующий ролик  

Видео урок: Что такое бранчинг

Git: обучение основам

В этой главе мы поговорим о бранчах в Git. Бранчи являются одной из наиболее мощных возможностей в Git, и по большей части потому, что их очень легко использовать. Это как будто Git хочет, чтобы вы использовали бранчи, а получить максимальную выгоду от Git обозначает - использовать бранчи часто и эффективно. В Git бранчи дешевые, и это обозначает, что они не доставят много неприятностей. Они не требуют большой мощности процессора. Они не занимают много места в хранилище. Их просто создать. Их просто удалить. С ними легко работать. И они позволяют вам попробовать что-то новое. Представьте себе, что у вас есть основной бранч, в котором вы работаете, и вдруг у вас появилась новая идея, но вы не уверены, сработает она или нет, вместо того чтобы делать много коммитов в основной бранч, а затем их отменять, если что-то не сработает, вы просто создаете новый бранч, чтобы испробовать здесь новые идеи.

Если идея не работает, вы просто выбрасываете бранч, и ваш основной бранч вообще не замусорен этими попытками. Если идея хорошо реализуется, вы можете перенести эти изменения в основной бранч, и этот процесс мы называем слияние. Бранчи также позволяют изолировать определенные особенности и разделы работы. Это особенно полезно, если вы сотрудничаете с другими людьми. Давайте представим себе, что у нас есть веб сайт, и мы хотим изменить раздел пользовательской регистрации, Для этого мы можем создать бранч, отдельный от основного, поработать над этим разделом, привлечь кого-то к этой работе, тогда как другие могут работать с основным бранчем.

Когда, наконец, работа закончена, и она всем нравится, мы можем сделать слияние с основным бранчем. Это очень часто встречается при работе с Git, фактически все время. Когда мы создаем бранчи, у нас все еще остается одна рабочая директория. Все файлы, с которыми мы работаем, остаются в той же папке проекта, что и до этого. Но когда мы переключаем бранчи, Git делает быстрое переключение контента. Я собираюсь взять все файлы и папки, находящиеся в рабочей директории, и сделать так, чтобы они соответствовали тому, что есть в бранче. Git поменяет два набора изменений.

То есть если мы работаем в мастер-бранче, а затем переключаемся на раздел с пользовательской регистрацией, в нашей рабочей директории будут все эти изменения, касаемые регистрации. Мы переключаемся обратно в основной бранч, все эти изменения уйдут, и вот мы снова в основном бранче. Git перекачает для нас все эти файлы, делая все эти изменения, и сделает он это очень быстро. Давайте посмотрим, что представляет собой бранчинг, чтобы вам все стало абсолютно понятно. Вот у нас есть основной бранч, это бранч по умолчанию, и мы именно в него начинаем делать коммиты. А затем после четырех коммитов мы решаем, что нужно поправить навигацию, но мы не уверены, сработает это или нет.

Тогда мы создаем новый бранч, а затем, когда все наши желаемые изменения находятся в рабочей директории, мы коммитим их в новый бранч. Так что коммит сейчас создан для нового бранча, а не для основного. Если кто-то сделает чекаут основного бранча, он не увидит наших изменений. Затем мы снова можем переключиться на основной бранч, и мы можем переключиться на бранч revise_navigation, и каждый раз Git будет подстраивать файлы и папки из рабочей директории, чтобы они соответствовали нужному бранчу. Допустим, мы снова переключаемся на основной бранч и создаем в нем несколько коммитов, наш бранч revise_navigation находится в своем старом состоянии.

Мы можем переключаться между основным бранчем и бранчем revise_navigation, и в каждом будет свой набор изменений. Когда мы закончим, мы можем сказать - все, можно забирать эти изменения из revise_navigation. Допустим, нужна неделя, чтобы кто-то одобрил изменения для revise_navigation, ну вот они одобрены, в это время было сделано несколько коммитов, но все нормально, мы собираемся сделать слияние, и будет создан новый коммит, а этот коммит сделает слияние изменений для бранча the revise_navigation. Таким образом, теперь в основном бранче содержатся изменения, которые были сделаны в revise_navigation.

Мы можем вернуться в revise_navigation, что-то еще поменять и снова сделать слияние. Кстати, нам не всегда нужно делать слияние с основным бранчем, у нас может быть много бранчей, и мы можем обмениваться изменениями между этими бранчами. Прежде чем мы начнем создавать бранчи, я хочу снова вам кое-что показать, но на этот раз я хочу поговорить о том, где находится HEAD в конкретный момент, потому что я считаю, что вам это необходимо понимать. У нас есть основной бранч, и мы знаем, что HEAD всегда указывает на последний коммит в основной бранче, на верхушку текущего бранча. Но как только мы создаем новый бранч, все меняется.

Мы создаем новый бранч, в этот момент HEAD до сих пор указывает на коммит 534de, основной бранч и revise_navigation на данном этапе абсолютно одинаковы. не было сделано никаких дополнительных коммитов, так что HEAD указывает на тот же коммит. Только тогда, когда мы создадим новые коммиты в бранче revise_navigation, HEAD переместится на новый коммит, коммит, которого нет в основном бранче. И мы можем перемещаться туда и обратно. Если мы переключимся обратно на основной бранч, тогда HEAD будет указывать на верхушку текущего бранча, а это основной бранч.

Если мы переключимся на revise_navigation, тогда он снова будет указывать на верхушку revise_navigation. Опять же, он похож на записывающую головку магнитофона, и он говорит нам, откуда будут сделаны новые коммиты. Итак, допустим, у меня есть основной бранч, в котором я работаю, и сюда указывает HEAD. Я создаю здесь еще коммиты. И когда я, наконец, готов сделать слияние с бранчем revise_navigation, будет создан этот коммит для слияния, и HEAD переместится на этот коммит. В общем, запомните это, потому что в следующем ролике мы изучим, как создавать бранчи, а также мы будем обращать внимание, на что указывает HEAD.