Продолжаем изучение Git. Сегодня у нас на очереди ветвление.
Как я уже говорил в прошлом конспекте - git позволяет создать несколько вариантов файловой системы.
Каждая такая ветвь живёт отдельной жизнью и не пересекается с другими, пока её об этом не попросят.
В терминологии гита ветвь называется бранч.
Список бранчей можно посмотреть командой:
git branch
Сейчас в проекте только один бранч - master. Это главный бранч.
Он него происходит ветвление. То есть создаётся копия файловой системы(ветка) и в ней вы делаете что хотите.
Переключаясь между бранчами вы меняете файловую систему согласно закоммиченым вами изменениям.
Создание новых бранчей
Создать бранч очень просто. Достаточно вызвать команду branch и написать после неё имя бранча.
Например создать бранч с именем fencing:
git branch fencing
Переключиться на бранч можно изученной ранее командой checkout, так же указав после неё имя бранча.
Например
git checkout fencing
Потом сразу-же смотрим список бранчей:
Как вы можете заметить - бранчей уже два: master и fencing. ни абсолютно идентичны и не зависят друг от друга. Звёздочка стоит перед бранчем fencing, это значит, что я сейчас в этом бранче. То есть вижу файловую систему такой, какой она записана в коммитах этого бранча.
Схематично это выглядит так.
Слияние веток
Предположим, что находясь в бранче fencing мы отредактировали какие-то файлы, добавили новые и т.п. И теперь нам необходимо слить эти изменения в master.
В терминологии чаще всего это процедуру называют "померджить". То есть сделать merge.
Находясь в одном бранче нужно вызывать команду merge, указав после неё название бранча, изменения которого вы хотите забрать.
Возвращаемся в master:
git checkout master
Забираем изменения с fencing:
git merge fencing
После мерджа видно какие конкретно файлы прилетели в текущий бранч.
Конфликты
Если вы работали над одним файлом в разных бранчах, то при слиянии возможны конфликты. То есть изменили вы в одном бранче одну строчку так, а в другом бранче эту же строчку изменили по-другому.
Логично, что git не понимает чему верить. Приоритетов у веток нет.
В этом случае при мердже git выдаст конфликт.
В файле вы увидите нечто подобное.
Это значит, что вам нужно стереть текст между верхними кавычками и знаками равно(или знаками равно и нижними) и потом стереть оставшиеся кавычки и знаки равно. Потом закоммитить файл.
Удаление бранчей
Первая буквы в слове delete - d. Поэтому именно такую опцию мы и напишем после ключевого слова branch.
Удаление бранча fencing:
git branch -d fencing
С удалением будьте аккуратнее, не потрите лишнего. Ещё раз напомню - бранчи друг с другом не связаны, никто ни от кого не наследуется. Удаление одного бранча никак не повлияет на другие.
Клонирование репозиториев
Чтобы сделать копию проекта на основании репозитория - его нужно склонировать. Делается это командой clone. После неё нужно указать откуда копируется проект и имя проекта. Имя проекта указывать необязательно.
За примером идём на github.
Например проект клиента golos.io хранится тут https://github.com/GolosChain/tolstoy
Чтобы его склонировать достаточно написать:
git clone https://github.com/GolosChain/tolstoy.git
В своём проекты вы всегда можете выполнить команду:
git remote -v
Которая покажет, откуда был склонирован проект.
Конечно-же автор проекта(который вы склонировали) может вносить изменения в свой проект. Вы о них не узнаете.
Чтобы быть в курсе изменений в "родительском" проекте следует выполнить команду:
git fetch
Отправка изменений в удалённый репозиторий
Если вы хотите отправить все свои коммиты в общий репозиторий - то вам нужно их "запушить"
Делается это командой push, после которой нужно указать ключевое слово origin и название бранча.
Например
git push origin my-branch
Если вы являетесь администратором репозитория и уверены в своём коде - можете сразу отправлять его в мастер
git push origin master
Теперь, когда вы знаете о большинстве аспектов работы с Git мы сведём их в одну диаграмму.
Что для меня было наиболее интересным и впечатляющим в данной неделе курса?
Самое интересное - это конечно-же возможность хранить неограниченное количество веток кода, сливать их друг с другом. Таким образом можно распараллелить проект и одновременно вести работу над разным функционалом, который не будет мешать друг другу.
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
kavalsky, andrvik, dimarss, tristamoff, shuler, rusalka, yurgent71, chika25, semasping, voltash, karusel1, orezaku, master-set, stereo, azimablog, nerengot, dim447, ssleeperr
Поэтому я тоже проголосовал за него!
Если Вы проголосуете за этот комментарий, то поможете сделать "Доброго Кита" сильнее!