#4 Git - как работают ветки

poster
В этом уроке мы разберем как создавать новые ветки, переключатся на них и мерджить сделанный функционал в основную ветку
Понравилось? Поделитесь с друзьями!
Понравилось?
Поделитесь с друзьями!
Комментарии
Текст видео

Всем привет. Мы продолжаем изучать гит и сегодня мы будем разбираться в ветками в гите. Зачем вообще нужны ветки в гите? Для того, чтобы разделять код. Например одна ветка у нас может быть основная для разработки. Если мы делаем новый функционал, то мы создаем новую ветку под него, а после окончания работы сливаем то, что мы сделали в основную ветку.

Это дает нам возможность легко откатывать код, если вдруг мы передумаем его сливать в основную ветку, либо делать несколько различных изменений в разных ветках.

Давайте попробуем. По умолчанию в гите создается ветка мастер. На ней мы с вами все это время работали.

Если мы напишем

git branch

то мы увидим список всех веток, которые у нас есть. В нашем случае это только мастер. Обратите внимание на звездочку перед названием мастер. Эта звездочка показывает на какой ветке мы сейчас.

Давайте создадим новую ветку

git branch implement-new-logic

Если мы еще раз напишем git branch, то увидим у нас 2 ветки, но мы все еще находимся на ветке мастер. Чтобы перейти на ветку, которую мы только что создали нужно написать

git checkout implement-new-logic

Теперь написав git branch мы видим что мы на ветке implement-new-logic.

Давайте добавим функцию getPerson в файл 2.js. Просто создадим функцию getPerson, которая будет склеивать имя и фамилию.

function getPerson(name, surname) {
  return name + " " + surname;
}

сохраним и запушим наши изменения.

git add .
git commit -m "Added getPerson function"
git push

Теперь если мы зайдем в наш репозиторий в браузере, то мы увидим что у нас там 2 ветки: implement-new-logic и master. Если мы перейдем на ветку implement-new-logic, то мы увидим, что на ней 5 коммитов, а в файле 2.js есть наша функция, которую мы добавили.

Если же мы перейдем обратно на мастер, для этого мы можем написать

git checkout master

то наши изменения, которые мы сделали так и останутся на той ветке. И пока мы их не вольем в ветку master, она не изменится.

В гите термин вливания ветки в другую ветку называется merge. Для того, что смерджить нашу ветку implement-new-logic в мастер, нам нужно сначала перейти на мастер и потом написать какую ветку мы хотим влить.

Давайте напишем

git merge implement-new-logic

Как мы видим, у нас написало, что ветка обновилась и добавился файл 2.js. Теперь у нас ветки стали идентичные и добавленный нами функционал находится в мастер ветке. Если мы напишем

git log

то увидим наш коммит, который мы добавляли на другой ветке. Так как мы ветку уже смерджили и она нам не нужна больше, давайте ее удалим.

git branch -d implement-new-logic

Теперь написав git branch мы опять видим только мастер. Давайте запушим эти изменения.

git add .
git commit -m "Merged implementing new logic to master"
git push

Теперь мы запушили наши изменения. И если мы заходим и видим master ветку, то мы видим, что у нас 5 коммитов и последним идет тот, который мы добавили. Единственное отличие в том, что мы удалили ветку локально, но не удалили ее на сервере. Вы можете зайти в список веток, all branches и нажать delete this branch. И это удаляет ветку не локально уже, а на сервере.

Только зарегистрированные пользователи могут оставлять комментарии.  Войдите, пожалуйста.
Роман Ногачевський
4 лет назад
Большое спасибо за обяснения, мне как начинающему понятно но есть вопрос)) Не совсем понятен пункт: "Давайте добавим функцию getPerson в файл 2.js. Просто создадим функцию getPerson, которая будет склеивать имя и фамилию." как ми добавляем и куда? Если мы не находимся на ветке Мастер, файл 2.js локально не отображается а добавить новую функцию в файл2.js судя с описания нужно уже на новой ветке. Застрял((
Rustam Apaev
6 лет назад
Здравствуй. А в чём прикол переключаться между ветками туда сюда, если в редакторе все равно всё сохраняется, будто и нет никаких веток? ну в гите откатился ты, а в редакторе то всё уже испорчено...
monsterlessons
6 лет назад
Добрый день. Редактор просто открывает локальный файл. Если файл поменялся, то он поменяется и в редакторе. Потому что редактор не хранит файлы, он их только отображает. Поэтому переключая ветки редактор просто отображает разные состояния проекта на ветках.
Rustam Apaev
6 лет назад
просто у меня в Visual Studio code, вроде есть встроенный гит, но я не разобрался как ветки тут выглядят. И пока не до конца понятно. а на сам гитхаб я не заливал ещё ветки, поэтому тоже не разобрался) хотя учебную задачку какую-то делал и вроде всё понятно было.
monsterlessons
6 лет назад
Встроенный в Visual Studio гит работает с ветками абсолютно также. Это просто UI обертка вокруг гит команд.
Rustam Apaev
6 лет назад
А всё, вижу, спасибо . Переключил ветку в терминале и все файлы старые как и было) круто
Yuri Istomin
7 лет назад
Добрый день! При попытке запушить ветку implemnt-new-logic выдает ошибку - fatal: Текущая ветка implemnt-new-logic не имеет вышестоящей ветки. Чтобы отправить текущую ветку и установить внешнюю ветку как вышестоящую для этой ветки, используйте git push --set-upstream origin implemnt-new-logic
monsterlessons
7 лет назад
Собственно выполнив команду git push --set-upstream origin implemnt-new-logic вы сможете пушить командой git push. В данный момент git у вас не знает в какую remote ветку вы хотите пушить. Поэтому либо делайте, как я написал выше, либо пушьте точно указав ветку git push origin implemnt-new-logic