О метке
`git branch` – это команда Git для управления ветками. Используйте эту метку для обозначения всех вопросов, связанных с ветками, их созданием, структурой, управлением и удалением.
Общие сведения
git branch – это команда для управления ветками в репозитории Git.
Ветка в Git’е — это просто «скользящий» указатель на один из коммитов. Когда вы создаёте новые коммиты, указатель ветки автоматически сдвигается вперёд, к вновь созданному коммиту.
Ветка, создаваемая первой в новом репозитории, по умолчанию называется master .
Использование
Чтобы создать новую ветку:
git branch
Просмотреть список всех веток в текущем репозитории:
git branch
То же, включая удаленные (remote) ветки:
git branch --all
Переключиться на другую ветку:
git checkout
Создать новую ветку, указывающую на текущий HEAD:
git branch
То же, плюс переключиться на нее одной командой:
git checkout -b
git branch -d
Взять текущие изменения (после последнего коммита) и создать из них новую ветку:
git stash git stash branch
Часто задаваемые вопросы
- Как переключаться между ветками в git, когда в текущей ветке есть несохраненные изменения?
- Как заменить ветку master другой веткой?
- Как создать ветку в git от произвольного места?
- Как создать копию ветки с удаленного репозитория?
Рекомендуемые к прочтению вопросы
Документация
В русскоязычной документации используются следующие термины:
- branch — ветка
- branching — управление ветками
- local branch — локальная ветка
- remote branch — удаленная ветка
На русском языке:
На английском языке:
Git для начинающих. Урок 8.
Ветки на сервере
Краткое содержание урока, основные инструкции для командной строки, полезные ссылки и советы.
Просмотр веток на сервере
- git branch выводит список локальных веток
- git branch -r (remote) — список веток на сервере
- git branch -a (all) — список всех веток, локальных и удаленных
Удаленные ветки начинаются с remotes/origin/
$ git branch master * news $ git branch -a master * news remotes/origin/master remotes/origin/news remotes/origin/students
Как отслеживать новые ветки на сервере
Если мы в проекте не одни, то в нем будут постоянно появляться новые ветки. Но как их увидеть?
Допустим, у нас в проекте есть только ветка master. В это время кто-то добавил новую ветку news. Просто git branch -a удаленные ветки не покажет
$ git branch -a * master remotes/origin/master
Чтобы их увидеть, сначала нужно выполнить команду git fetch, которая сходит на сервер и проверит, что там есть нового
$ git fetch remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. From github.com:Webdevkin/site-git * [new branch] news -> origin/news
Мы видим, что появилась новая ветка news, и команда git branch -a это подтверждает
$ git branch -a * master remotes/origin/master remotes/origin/news
Обратите внимание, ветка news появилась только в списке удаленных, но не локальных. То есть команда git fetch не создает локальные ветки, она просто подтягивает информацию о них. Чтобы переключиться на новую ветку, нужно выполнить git checkout
$ git checkout news Branch news set up to track remote branch news from origin. Switched to a new branch 'news'
Вот теперь мы переключились на новую ветку
$ git branch -a master * news remotes/origin/master remotes/origin/news
Как удалить ветку с сервера
Выполняем пуш ветки, только с флагом —delete
$ git push origin --delete news To git@github.com:Webdevkin/site-git.git - [deleted] news
Как работать с удаленными ветками в PhpStorm
Точно так же, как и с локальными, только в списке Remote Branches. Чтобы увидеть новые ветки, тоже нужно выполнить команду fetch. Правый клик — Git — Repository — Fetch. А уже потом можно переключаться на эту ветку: Remote Branches — branch_name — Checkout as.
Что могу посоветовать
- регулярно просматривайте github — так вы будете лучше понимать, чем занимаются ваши коллеги
- не забывайте делать git fetch перед переключением на удаленную ветку
- обсудите с коллегами правила именования веток и соблюдайте их
Я не в первый раз упоминаю про именование коммитов и веток. Если вы работаете один, то как называть — ваше дело. Но если работаете в команде, то несоблюдение каких-то правил могут привести примерно к этому

Чтобы не ставить в такие ситуации ваших коллег, важно договориться, как именовать ветки и как подписывать коммиты. Это организационные моменты, которые очень упрощают работу с git. Подробнее мы их обсудим во второй части курса.
На этом все. В следующем уроке мы поговорим о слиянии или мерджах веток.
Спасибо за внимание и до встречи!
Все уроки курса
- Вводный урок
- 1. Установка и базовая настройка git
- 2. Создание и клонирование репозитория git
- 3. Делаем первые изменения, git status и git diff
- 4. Коммиты и история коммитов, git commit, git log и git show
- 5. Подробнее об истории коммитов. Путешествие по истории
- 6. Работа с сервером, git push и git pull
- 7. Ветки — главная фишка git, git branch и git checkout
- 8. Работа с ветками на сервере, git fetch
- 9. Слияния или мерджи веток, git merge
- 10. Конфликты и их разрешение
- Платная часть курса. Презентация
- * 11. Работа с gitignore и git exclude
- * 12. Буфер обмена git, git stash
- * 13. Копирование коммитов, git cherry-pick
- * 14. Отмена и редактирование последнего коммита
- * 15. Отмена произвольного коммита, git revert
- 16. Склеивание коммитов, git rebase —interactive и git reflog
- * 17. Зачем склеивать коммиты. Плюсы и минусы сквоша
- * 18. Работа с git rebase. Отличия от merge
- * 19. Что такое git push —force и как с ним работать
- * 20. Ищем баги с помощью git, git bisect
- * 21. Как и зачем работать с тегами git
- * 22. Процессы: github flow и git flow
- * 23. Псевдонимы в git
- 24. Мердж-реквесты
- * 25. Форки
Git для начинающих. Урок 7.
Работа с ветками
Краткое содержание урока, основные инструкции для командной строки, полезные ссылки и советы.
Ветки — главная фишка git
Git стал стандартом в системах контроля версий благодаря простой и удобной работе с ветками.
Какие проблемы решают ветки
Представим рабочую ситуацию. Мы сидим и разрабатываем функционал новой большой фичи, например, добавляем на сайт раздел новостей. Уже добавили новые файлы, поменяли стили, поправили разметку, но до завершения еще далеко.
Внезапно прилетает задача — срочно поправить багу в верстке шапки. Мы не можем чинить багу прямо сейчас, в текущем состоянии проекта. У нас много изменений, но работа над большой фичей не завершена — поэтому мешать код новой фичи и код с починкой срочной баги нельзя. Как быть?
Было бы здорово, если бы могли разрабатывать новую фичу независимо от основного кода проекта. То есть взять и зафиксировать рабочее состояние сайта, а делать новый функционал отдельно, не боясь поломать рабочий код. И еще чтобы можно было переключаться между основным кодом (для правки баги) и кодом новой фичи (для продолжения работы над ней)
Когда я не пользовался git, то решал эту проблему созданием архивов проекта. Довел сайт до какого-то рабочего состояния — сделал архив. Реализовал новую фичу — сделал еще один архив. Нужно переключиться на старый код для правки баги — сохранил текущую работу в новый «временный» архив, выбрал старый «стабильный» архив, распаковал, починил там багу, вернулся обратно во «временный» архив.
Схема рабочая, но слишком много суеты и неудобств:
- нужно постоянно создавать архивы с рабочим кодом
- сложно «переключаться» между архивами
- сложно перетаскивать изменения между архивами
- легко что-то напутать или потерять — все мы люди
Все эти проблемы git решает механизмом веток.
Как работают ветки
Представим код проекта в виде дерева. Посередине ствол — это рабочее состояние проекта, тот код, который выложен на боевом сервере. Этот ствол в терминах git называется основной веткой разработки — веткой master. Эта ветка есть всегда в любом проекте. Как только мы клонировали или создали новый репозиторий, мы попали в ветку master. Все, что мы делали на предыдущих уроках, мы делали в мастере.
Когда мы начинаем работать над новым функционалом, мы создаем новую ветку на основе master. Это называется «ответвиться от мастера». После этого мы можем работать, создавать новые файлы, вносить изменения в старые, можем хоть удалить половину проекта — главное, что это будет изолировано от основного мастера. То есть в своей ветке мы можем как угодно ломать проект, основной код при этом не пострадает.
Кроме того мы в любой момент можем переключиться в мастер, например, для правки баги, не боясь потерять изменения в своей ветке с новым функционалом. Починим багу в мастере, выложим правку на боевой сайт и так же легко вернемся к своей ветке и продолжим работать в ней.
Так как git хранит всю историю проекта, то он хранит все коммиты всех веток и со всеми изменениями. То есть вернувшись в свою ветку мы увидим уже сделанные коммиты и можем посмотреть изменения по ним.
Когда мы заканчиваем работать над новым функционалом, то нужно наши изменения перенести в мастер, чтобы залить на боевой сайт. Это называется слить ветку в мастер, или залить в мастер, или смерджить в мастер. При этом после мерджа в мастере оказываются не только наши изменения, но и те, которые были в мастере, но не были в нашей ветке (правка баги в мастере). То есть нам даже не обязательно после правки баги в мастере переносить эти изменения в свою ветку. При мердже git наш новый код «положит» поверх того, что было в мастере, не стирая старый.
Чтобы было нагляднее и понятнее, как это работает, смотрите видео. А в тексте ниже краткое описание команд для работы с ветками.
Ветка master
Еще раз закрепим. Ветка master — это, как правило, основная ветка проекта. Она появляется сразу после клонирования или инициализации репозитория. Есть разные варианты ведения веток, но мы будем считать, что master — наша основная рабочая ветка, от которой ответвляются другие.
Как создать новую ветку
$ git checkout -b news Switched to a new branch 'news'
Так мы создали новую ветку news, имея в виду, что будем разрабатывать в ней блок новостей.
Как переключаться между ветками
Для этого используется команда checkout
$ git checkout news
Обратите внимание, если у вас есть незакоммиченные изменения, то переключиться на другую ветку не получится — git за этим следит
Вот что при этом вы увидите
$ git checkout master error: Your local changes to the following files would be overwritten by checkout: index.html Please, commit your changes or stash them before you can switch branches. Aborting
Поэтому сначала или закоммитьте изменения в ветке, или откатите эти изменения — а уже потом переключайтесь. Это может показаться странным, но так сделано для безопасности, чтобы случайно не потерять код.
Как посмотреть все ветки
$ git branch master * news
Этой командой мы выведем список всех локальных веток. Звездочка у news означает текущую ветку, в которой мы сейчас находимся.
Коммитим в новую ветку
Коммиты в ветку добавляются точно так же, как и раньше. Делаем изменения в файлах, потом git add, потом git commit -m ‘commit message’.
Как запушить новую ветку
Вспомним, как мы пушили раньше
$ git push origin master
Точно так же мы пушим и новую ветку, только вместо master указываем свое название
$ git push origin news
Если такой ветки на сервере нет, то она создастся. Если мы ее уже пушили раньше, то просто отправятся новые коммиты.
Как переименовать ветку
Допустим, мы неудачно выбрали название и хотим его заменить. Находясь в нужной ветке, выполним команды
$ git branch -m block-news
Это переименует текущую ветку news в block-news. Чтобы убедиться, посмотрим список веток
$ git branch * block-news master
Обратите внимание, если мы запушим новую ветку, то на сервере, в github, появится еще одна ветка block-news, и при этом останется старая news. Чтобы не засорять проект, старую ветку нужно удалить как локальную у себя, так и удаленную на сервере.
Как удалить ветку
Удаляется ветка командой git branch -d branch_name. Но здесь могут быть варианты. Рассмотрим, что может пойти не так
$ git branch -d block-news error: Cannot delete the branch 'block-news' which you are currently on.
Здесь просто — мы не можем удалить ветку, потому что в ней находимся. Сначала нужно перелючиться в мастер
$ git checkout master $ git branch -d block-news error: The branch 'block-news' is not fully merged. If you are sure you want to delete it, run 'git branch -D block-news'.
Опять ошибка — здесь git говорит о том, что в удаляемой ветке есть код, который не залит в мастер. То есть при удалении ветки этот код потеряется. Поэтому если мы уверены в своих действиях и ветка действительно не нужна, то вместо флага -d нужен -D
$ git branch -D block-news Deleted branch block-news (was cb38a55).
Теперь удалено без вопросов.
Как работать с ветками в PhpStorm
В правом нижнем углу есть пункт «Git:master». Там пишется название текущей ветки. Чтобы создать новую, нужно кликнуть на этот пункт и выбрать New Branch. Чтобы переключиться, выбрать в списке Local Branches нужную ветку и Checkout. Чтобы удалить или переименовать соотвественно Delete или Rename.
Наглядно это показывается в видеоуроке
Раздел Remote Branches мы рассмотрим в следующем уроке
Что могу посоветовать
- научитесь легко оперировать ветками
- создавайте больше веток
- называйте ветки по общим правилам
- пушьте ветки почаще, их легко потом удалить
Поняв магию веток, мы уже не представим свою работу без git. Любой, даже небольшой проект мы будем начинать с создания репозитория. А работа с ветками будет такой же естественной, как и собственно написание кода. Мне кажется, именно понимание веток превращает git из прикольной тулзы в незаменимый инструмент работы.
И напоследок Киану. Просветление. Назад возврата нет

В следующем уроке мы узнаем, как работать с ветками на сервере
Спасибо за внимание и до встречи!
Все уроки курса
- Вводный урок
- 1. Установка и базовая настройка git
- 2. Создание и клонирование репозитория git
- 3. Делаем первые изменения, git status и git diff
- 4. Коммиты и история коммитов, git commit, git log и git show
- 5. Подробнее об истории коммитов. Путешествие по истории
- 6. Работа с сервером, git push и git pull
- 7. Ветки — главная фишка git, git branch и git checkout
- 8. Работа с ветками на сервере, git fetch
- 9. Слияния или мерджи веток, git merge
- 10. Конфликты и их разрешение
- Платная часть курса. Презентация
- * 11. Работа с gitignore и git exclude
- * 12. Буфер обмена git, git stash
- * 13. Копирование коммитов, git cherry-pick
- * 14. Отмена и редактирование последнего коммита
- * 15. Отмена произвольного коммита, git revert
- 16. Склеивание коммитов, git rebase —interactive и git reflog
- * 17. Зачем склеивать коммиты. Плюсы и минусы сквоша
- * 18. Работа с git rebase. Отличия от merge
- * 19. Что такое git push —force и как с ним работать
- * 20. Ищем баги с помощью git, git bisect
- * 21. Как и зачем работать с тегами git
- * 22. Процессы: github flow и git flow
- * 23. Псевдонимы в git
- 24. Мердж-реквесты
- * 25. Форки
Git для новичков (часть 2)
В прошлой статье, я рассказал, что такое Git, как его установить и выложить свой код на GitHub. Сегодня мы поговорим про работу в команде над одним проектом. И как это устроено в Git.
В данной статье, вся работа с Git будет через командную строку.
Совместная работа
Представим, что вы с друзьями придумали проект, с «блэкджеком» и . Вы разделили обязанности. Кто-то будет делать авторизацию и регистрацию, а кто-то функционал вывода новостей. Для этого вам пригодится ветвление.

Ветка — это набор commit (кружок), которые идут друг за другом. У ветки есть название, основную ветку чаще всего называют master (на картинках будет называться main ) . Если говорить простыми словами, то ветка master — это наш проект.
Другие ветки — это отдельное место для реализации нового функционала или исправление багов (ошибок) нашего проекта. То есть, с отдельной веткой вы делаете что угодно, а затем сливаете эти изменения в основную ветку master .
? Не рекомендую создавать commit напрямую в master . Лучше для этого заводить новую ветку и все изменения писать там.
Для того, чтобы создать новую ветку вводим:
git branch #или вот так git checkout -b

Эти команды делают тоже самое, только второй вариант позволяет сразу переключиться в новую ветку. Вносить изменения в новую ветку можно сразу после ее создания.
При создании новой ветки, старайтесь называть ее кратким и ёмким именем. Чтобы сразу было понятно, что именно изменялось по проекту. Если вы используете, какую-нибудь систему для ведения задач, то можете в начале названия ветки указывать ID задачи, чтобы можно было легко найти, на основе какой задачи была создана ветка. Например вот так:
3424_fix_catalog_ajax
В каждом новом commit следует оставлять коммент и в нем описывать суть изменений.
Переключаться между ветками можно такой командой:
git checkout
После того, как вы завершили работу над своей задачей, ветку можно слить в master . Для этого нужно переключиться в ветку master и выполнить следующую команду:
# Переключаемся в master git checkout master # Обновляем локальную ветку с сервера git pull origin master # Делаем merge вашей ветки, в ветку в которой вы находитесь # В данном примере это master git merge

❗️ Перед тем как сливать новый merge , стоит обновить локальную ветку master , во избежания дальнейших проблем.
Команда merge берет все изменения из ветки (например bugFix ) и добавляет их в ветку master .
Для того чтобы посмотреть текущее состояние ветки, например, какие файлы добавлены или не добавлены для создания commit, можно выполнить команду:
git status
Другие пользователи не увидят вашу ветку, пока она не будет отправлена на удаленный репозиторий. Поэтому, после того как вы слили все изменения в master , нужно отправить их в GitHub. Для этого обязательно нужно находиться в ветке master :
git checkout master # Отправляем наши изменения в GitHub git push origin master
Теперь все ваши изменения, в ветке master улетели в GitHub. Таким же образом, можно отправить любую другую ветку:
git checkout git push origin
?Совет. Каждый коммит, лучше заливать сразу в удаленный репозиторий. Никто не застрахован, поломки собственного ПК. Поэтому чтобы не потерять все наработки, не забывайте сливать ваши изменения на GitHub.
Как же теперь другой человек получит все ваши изменения?
Для этого вам понадобиться GitHub или любой другой сервис для хранения кода. В прошлой статье я рассказывал как отправить код в GitHub. Сейчас я покажу, как его скопировать обратно себе на компьютер.
Если у вашего друга раньше не было проекта, то ему придется его «клонировать» себе:
git clone

? Адрес репозитория на GitHub можно получить, нажав на зеленую кнопку Code
После выполнения команды, в папке где появиться проект и ваш друг сможет с ним работать. Все ветки и их история также подтянуться.
Теперь самое главное
Перед тем, как создавать новый функционал и новую ветку, стоит обновить master на вашем устройстве. Для этого нужно находиться в этой ветке и выполнить следующую команду:
# Переключаемся в master git checkout master # Подтягиваем изменения из репозитория GitHub git pull origin master
Таким же образом можно актуализировать любую другую ветку, заменив название ветки master на вашу.
Для обновления всех веток сразу, можно использовать такую, команду, но не рекомендую:
git pull
Теперь можно создавать новую ветку и кодить.
Какие проблемы могут возникнуть?
Git старается автоматически сливать изменения, однако это не всегда возможно. Иногда возникают конфликты. Например, когда в двух ветках были изменения в одной и той же строчке кода. Если такое произошло, то необходимо разрешить конфликт вручную. Для этого откройте файл там, где этого произошло. Например, вы можете увидеть что-то подобное:
# Вы пытались выполнить это git checkout new_styles git merge master # В конце увидели это Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result.
======= >>>>>>> master Hello,World!
Первый раздел (HEAD) — это то, что находиться в текущей ветке, куда вы пытались слить код. Второй раздел (между ==== и >>>>master ) — версия кода в ветке, откуда вы пытались слить код (в данном случае master ). Для того, чтобы разрешить конфликт, стоит оставить стили и привести файл в такой вид:
Hello,World!
После внесения нужных изменений добавьте ваш файл через git add как измененный и создайте новый commit:
git add index.html git commit -m "Merged master fixed conflict."
Вспомогательные команды
Просмотреть изменения относительно двух веток можно командой:
git diff
Удалить ненужную ветку:
git branch -d
Просмотр историю ветки:
git log
Подсказки по популярным командам:
# По популярным командам git help # Или по конкретной команде git help # Например clone git help clone
Практика и вспомогательные инструменты
Для улучшения ваших навыков, в очередной раз оставлю ссылку на полезный тренажер с заданиями.
Так же, для удобства использования в Visual Studio Code, советую поставить это расширение, которое визуализирует ваши ветки и commit, и помогает с ними работать.
В телеграмм канале Step by Step , я публикую еще больше материала для тех, кто хочет научиться программировать и провожу обучающие стримы, для всех желающих.