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

Видео урок: Создание и переключение между бранчами за один шаг

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

В последнее время мы изучали, как создавать бранчи, а также мы видели, как переключаться между бранчами. В этом ролике мы рассмотрим, как мы можем и создавать, и переключаться между бранчами одновременно, чтобы нам не приходилось набирать обе команды. Давайте посмотрим, пишем git branch, мы в новом бранче new_feature, а если я напишу git log oneline, то вы увидите новый коммит, созданный здесь. Я изменил название в index.html. Я также могу посмотреть на этот коммит при помощи git show, а также я могу скопировать и вставить SHA, который на него ссылается, или же HEAD указывает на данный коммит прямо сейчас.

Итак, git show HEAD покажет мне это изменение, она покажет мне этот коммит и то, что было изменено. Допустим, изменение, которое мы сейчас хотим сделать, заключается в создании нового бранча, где мы будем сокращать название, название сейчас стало очень длинным, а мы попытаемся его сократить. В общем, мы создадим новый бранч и сделаем его чекаут одновременно. Мы используем команду checkout с опцией -b; -b обозначает создание и переключение в одно и то же время. Вы можете подумать, что это обозначает чекаут нового бранча, и это немного нелогично, вы можете подумать, что бранч - это что-то, что создает новый бранч.

Почему я не использую команду branch? Здесь она не подойдет, здесь нужна команда checkout. Вставляю это в рабочую директорию как новый бранч, вот что она делает. Теперь нам нужно дать бранчу имя. Первый бранч, который мы создали, мы назвали new_ feature, а это довольно общее и не очень полезное имя. Нужно давать бранчам полезные, значимые имена, так чтобы когда вы смотрели на список бранчей, вы понимали, к чему они относятся. Мы называем этот бранч shorten_title, и становится довольно понятно, что мы собираемся сделать. Итак, переключаемся на shorten_title, Git создал его и сделал чекаут, а также переключился на него в это же время, мы можем это увидеть при помощи git branch.

Вот мы в бранче shorten_title. Пишем git log oneline и видим, что он включает в себя коммит, который мы сделали в бранче new_feature. То есть мы сделали бранч не из мастер-бранча, а из new_feature. То есть мы были в new_feature, а если это бранч, в котором мы находились на тот момент, если здесь находится HEAD, тогда новый бранч будет создан отсюда. Я мог бы переключиться на мастер-бранч и создать новый бранч отсюда, и тогда этот коммит не был бы включен, коммит dc9ca3c.

Но я хочу, чтобы этот коммит был здесь, мне нужно было длинное название, потому что я хочу его сократить. Давайте сделаем это, открываем файл, и внутри index.html вы видите это изменение, я собираюсь убрать Welcome. Мы сделаем просто Explore California - Affordable Outdoor Tours, это более короткое название, и оно работает на нас. Сохраняем, закрываем. И мы знаем, как делать коммиты, git status. И прежде чем мы добавим это изменение и сделаем коммит, я хочу, чтобы вы обратили внимание на то, что checkout - это команда, которую мы использовали ранее, когда хотели сбросить изменения в рабочей директории.

И помните, я говорил вам тогда, что мы используем два дефиса, чтобы было очевидно, что мы не пытаемся сделать чекаут бранча, а пытаемся сделать чекаут файла. Итак, два дефиса обозначают "из текущего бранча", вот что Git говорит нам, что не нужно менять бранчи, это не то, для чего я хочу использовать здесь чекаут, я делаю чекаут файла. Так что checkout на самом деле служит нам двойную службу. Она делает чекаут бранчей, но также она идем в репозиторий и делает для нас чекаут файлов. На самом деле, checkout говорит - отправьте это в рабочую директорию.

Давайте добавим это изменение, пишем git add index.html, git commit и такое сообщение "Shorten the title of index.html." В нем описано, что делает коммит. Если мы напишем git log oneline, вы увидите, что все на месте. Есть коммит dc9, за которым следует коммит 6a2a3f5. Если мы сейчас пропишем git checkout для бранча new_feature, а затем пропишем git log oneline, вы увидите, что изменения здесь нет.

Если мы переключимся на основной бранч, а затем посмотрим на логи, вы увидите, что здесь нет обоих изменений. Вы можете переключаться между бранчами, и каждый раз вы будете видеть разницу внутри файла index.html. Вы также можете сделать чекаут бранча shorten_title и использовать git log с некоторыми из этих опций, что я вам показал, например, --graph, --oneline, --decorate, --all.

Обратите внимание, что мне даются разные коммиты, и вы видите, что показана верхушка каждого из этих бранчей; в основном бранче такой коммит последний, в new_feature такой. Прямо сейчас HEAD находится в shorten_title, так что указан этот последний коммит. Спокойно переключайтесь между бранчами, делайте много коммитов, пока не почувствуете себя комфортно, и вы тогда действительно поймете, как работает переключение, потому что вы все время будете использовать это в Git, так что потренируйтесь.