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 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 для начинающих. Урок 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
В этой статье мы расскажем, как работать с ветками в Git с помощью команды git branch. О том, что такое Git, вы можете узнать в статье: Работа с Git на хостинге.
Ветви в Git
Ветка в Git — это набор коммитов, расположенных в хронологическом порядке. У каждой ветки есть свое название. Основная ветка чаще всего называется master, она появляется при инициализации репозитория и считается главной веткой проекта. Другим веткам вы даете имена самостоятельно. Дополнительные ветки используются для создания нового функционала и исправления ошибок. То есть все изменения в проекте создаются в отдельной ветке, а затем эта ветка сливается с основной.
Что такое бранч в Git
Команда git branch нужна для работы с ветвлением в Git. При помощи нее можно создавать новые ветки, а также просматривать, переименовывать и удалять существующие.
Как создать новую ветку в Git
Чтобы создать новую ветку, введите команду:
git branch new-branch
где new-branch — имя новой ветки.
При использовании этой команды вы создаете новую ветку, но не переключаетесь на нее.
Как переключиться на ветку в Git
Чтобы переключиться на новую ветку, используйте команду:
git checkout your-branch
где your-branch — имя ветки, к которой хотите перейти.
Как создать новую ветку и переключиться на нее
Как правило, при создании новой ветки пользователю сразу нужно перейти в нее. В таком случае можно использовать команду:
git checkout branch new-branch
где new-branch — имя новой ветки.
Или же можно ввести команду git checkout с ключом —b:
git checkout -b new-branch
где new-branch — имя новой ветки.
Слияние веток
Ветвление позволяет отделить готовый код проекта от функционала, который находится в стадии разработки и тестирования. Когда разработчик завершил задачу, ветку с новым кодом необходимо слить с основной. Сделать это можно с помощью команды git merge. Чтобы слить код в основную ветку:
Перейдите к ветке master:
git checkout master
Обновите локальную ветку с сервера:
git pull origin master
Выполните команду:
git merge merged-branch
где merged-branch — имя сливаемой ветки. Сливаемой веткой считается та, из которой берутся изменения.
Команда git merge берет все данные из сливаемой ветки и добавляет их в основную. После процедуры слияния сливаемая ветка не изменяется, все данные в ней остаются в прежнем виде.
В процессе слияния ветвей могут возникнуть конфликты. Чаще всего конфликты появляются, когда два человека вносят изменения в одну и ту же строку файла или один пользователь удаляет файл, который в это время редактирует другой пользователь. В таких случаях Git прерывает процесс выполнения команды, чтобы вы могли разрешить конфликт.
Для работы с конфликтами используются опции:
- —continue — позволяет продолжить слияние после разрешения конфликта,
- —abort — прерывает процесс слияния и возвращает ветку к начальному состоянию.
Чтобы решить конфликт слияния при изменении строк, необходимо отредактировать файл, в котором возник конфликт. В нем нужно удалить маркеры конфликта и оставить те изменения, которые должны быть в итоговой версии. Чтобы решить конфликт с удалением файлов, нужно решить, вернуть ли удаленный файл в репозиторий или окончательно удалить его.
Как управлять ветками с помощью git branch
Чтобы вывести список существующих веток, используйте команду:
git branch
Ваша текущая ветка будет отмечена символом * и выделена зеленым цветом.
Чтобы увидеть последний сохраненный коммит в каждой ветке, введите команду:
git branch -v
Чтобы вывести ветки, которые были слиты с текущей, используйте команду:
git branch --merged
Чтобы вывести ветки, которые еще не были слиты с текущей, используйте команду:
git branch --no-merged
Как закоммитить изменения в новую ветку
После внесения изменений в новой ветке необходимо сделать коммит, чтобы сохранить код. Для этого используйте команды:
git add .
git commit -m ""
Как отправить изменения в удаленный репозиторий
Чтобы отправить локальную ветку в удаленный репозиторий, используйте команду:
git push origin your-branch
где your-branch — имя ветки, которую хотите отправить.
Как переименовать ветку в Git
Чтобы переименовать ветку, на которой вы находитесь, используйте команду:
git branch -m new-name
где new-name — новое имя ветки.
Если вам необходимо переименовать другую ветку, воспользуйтесь командой:
git branch -m old-name new-name
- old-name — старое имя ветки,
- new-name — новое имя ветки.
Если отправить переименованную ветку в удаленный репозиторий, то появится ветка с новым именем, при этом ветка со старым именем не пропадет. Поэтому ветку со старым именем нужно удалить из удаленного репозитория:
git push origin :old-name
где old-name — старое имя ветки.
Затем необходимо отправить новую ветку в удаленный репозиторий и настроить локальную ветку для отслеживания удаленной ветки:
git push --set-upstream origin new-name
где new-name — новое имя ветки.
Как удалить ветку в Git
Чтобы удалить локальную ветку в Git, используйте команду:
git branch -d your-branch
где your-branch — имя ветки, которую хотите удалить.
Удалить ветку, в которой вы находитесь в данный момент, нельзя. Поэтому перед удалением вам нужно перейти на другую ветку, например, master. Сделать это можно с помощью команды:
git checkout master
Если в ветке есть несохраненные изменения, то удалить ее с помощью ключа —d не получится. Так Git защищает пользователей от случайной потери данных. Если вы уверены, что вам не нужны внесенные изменения и данные можно удалить, используйте команду:
git branch -D your-branch
где your-branch — имя ветки, которую хотите удалить.
Эта команда принудительно удалит заданную ветку.
Как просмотреть состояния файлов ветки
Если перейти на другую ветку, предварительно не сделав коммит, то все незакоммиченные изменения перенесутся на ветку, на которую вы перешли. Поэтому перед переходом необходимо проверять, закоммитили ли вы изменения в текущей ветке. Сделать это можно с помощью команды:
git status
Эта команда показывает текущее состояние вашего репозитория. Если все изменения закоммичены, то вы увидите следующее:
On branch master nothing to commit, working tree clean
Если вы создавали, редактировали или удаляли файлы и не закоммитили изменения, то вывод будет примерно таким:
On branch master Changes not staged for commit: (use "git add . " to update what will be committed) (use "git restore . " to discard changes in working directory) modified: file.txt Untracked files: (use "git add . " to include in what will be committed) file1.txt
В этом случае все необходимые изменения нужно закоммитить.
Как посмотреть историю коммитов
Для просмотра истории коммитов используйте команду:
git log
Чтобы получить более конкретный вывод, можно использовать опции:
- —author=»your-name» — показывает коммиты, созданные заданным пользователем;
- —after=»date» — показывает коммиты, созданные после указанной даты;
- —before=»date» — показывает коммиты, созданные до указанной даты;
- -n — показывает последние n коммитов;
- —oneline — показывает укороченный вывод коммитов (в одну строку). Выводит только хэш и заголовок;
- -p — выводит изменения, содержащиеся в коммите.
Это лишь часть опций. Полный список можно посмотреть с помощью команды:
git log --help
Как посмотреть разницу между коммитами
Чтобы просмотреть изменения в файлах по сравнению с последним коммитом, воспользуйтесь командой:
git diff
Чтобы сравнить изменения в двух разных коммитах, используйте команду: