Раздел помощи SpaceWeb

Работа с ветками в Git

15 июн, 2024

Что такое ветки

Ветка в Git представляет собой последовательность коммитов, которые упорядочены по времени. 

У каждой ветки есть своё уникальное название. Основная ветка, которая обычно называется master, создаётся при установке репозитория и служит основной веткой проекта. Остальные ветки можно называть по своему усмотрению. 

Ветки создаются для работы над новыми функциями и исправлением ошибок. Все изменения в проекте вносятся в отдельной ветке, после чего она объединяется с основной.

Для чего нужны ветки

  • Изоляция изменений. Ветки позволяют вам работать над новыми фичами, исправлениями багов или экспериментами независимо от основной кодовой базы. Это означает, что изменения, которые были сделаны в одной ветке, не повлияют на другие ветки, пока вы не решите их объединить.
  • Совместная работа. Ветки облегчают работу в команде, так как каждый разработчик может работать в своей ветке, не мешая другим. Когда работа завершена, изменения можно объединить в основную ветку (обычно это ветка main или master).
  • Управление версиями. Ветки помогают управлять разными версиями проекта. Вы можете создавать ветки для различных релизов или поддерживать стабильную ветку для продакшена, в то время как разработки ведутся в другой ветке.
  • История изменений. Использование веток делает историю изменений более понятной и управляемой. Вы можете легко отслеживать, какие изменения были внесены в какой ветке и когда они были объединены с другими ветками.

Команда git branch 

Команда git branch в Git используется для управления ветками в вашем репозитории. Она выполняет несколько различных функций в зависимости от того, какие аргументы или параметры вы ей передаете. С её помощью можно просматривать список веток и создавать новые.

Команда git checkout

Команда git checkout в Git используется для переключения между ветками, а также для восстановления файлов или коммитов. Она выполняет несколько различных функций в зависимости от переданных аргументов. С помощью git checkout можно переключать на другую ветку, восстанавливать файлы из другого коммита и прочее.

Как создать новую ветку в Git

Чтобы создать новую ветку в Git, вы можете использовать git branch. Вот как это сделать:

git branch [new_branch_name]

Эта команда создает новую ветку с именем «new_branch_name».

Хотя после выполнения этой операции ветка уже создана, но вы всё ещё остаетесь в прежней ветке. Если вы хотите перейти на другую ветку (в том числе в только что созданную), вам нужно использовать команду checkout:

git checkout [branch_name]

Где «branch_name» – это название ветки.

Чтобы определить на текущее местоположения разработчика, Git использует специальный параметр HEAD. Он указывает на текущую локальную ветку. Когда вы выполните команду checkout, HEAD переместится на новую ветку.

Как переключиться на ветку в Git

Чтобы переключиться на другую ветку в Git, вы также можете использовать команду git checkout. Вот как это сделать:

git checkout [branch_name]

Эта команда переключит вас на ветку «branch_name».

Как слить ветки

Ветки помогают отделить стабильный код проекта от функционала, который находится в стадии разработки и тестирования. Когда разработчик завершает работу над задачей, ветку с новым кодом необходимо объединить с основной веткой. Для этого используется команда git merge. Чтобы объединить код с основной веткой, выполните следующие шаги:

  1. Переключитесь на ветку master:
git checkout master

  1. Обновите локальную ветку с сервера:
git pull origin master

  1. Выполните команду слияния:
git merge [branch_name]

Где «branch_name» – это название ветки, из которой будут взяты изменения.

Команда git merge берёт все изменения из указанной ветки и добавляет их в основную ветку. При этом сливаемая ветка остаётся неизменной, все данные в ней сохраняются в прежнем виде.

В процессе слияния могут возникнуть конфликты. Конфликты обычно появляются, когда два разработчика изменяют одну и ту же строку файла или один разработчик удаляет файл, который в это время редактирует другой. В таких случаях Git останавливает процесс слияния, чтобы вы могли разрешить конфликт.

Чтобы эффективно работать с конфликтами, вы можете использовать следующие опции:

  • «--continue» продолжает слияние после разрешения конфликта.
  • «--abort» прерывает процесс слияния и возвращает ветку к начальному состоянию.

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

Чтобы разрешить конфликт, который связан с удалением файлов, решите, следует ли вернуть удалённый файл в репозиторий или окончательно его удалить.

Управление ветками с помощью git branch

Эта команда способна на большее, чем просто создание веток в Git. Если запустить её без параметров:

git branch

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

  first_branch
* master
  second_branch

С помощью параметра «-v» можно получить информацию о последнем сохранённом коммите в каждой ветке:

git branch -v
  first_branch 8fa301b Fix math
* master 225cc2d Merge branch 'first_branch'
  second_branch c56ee12 Refactor code style

Также существуют опции «--merged» и «--no-merged», с помощью которых можно отфильтровать список веток. Они позволяют получить список веток, которые уже были слиты, или, наоборот, тех, которые ещё не были слиты с другими. 

Например, чтобы вывести ветки, которые уже были слиты с текущей:

git branch --merged
  first_branch
* master

Если вы хотите увидеть ветки, которые ещё не были слиты с текущей, используйте:

git branch --no-merged
  second_branch

Как закоммитить изменения в новую ветку

После внесения изменений в новой ветке необходимо зафиксировать их с помощью коммита. Для этого используйте следующие команды:

git add .
git commit -m "[комментарий]"
 

Как переименовать ветку git

Если вы хотите переименовать ветку, на которой в данный момент находитесь, выполните следующую команду:

git branch -m [new_branch_name]

Если вы хотите переименовать другую ветку, укажите старое и новое имена ветки:

git branch -m [old_branch_name] [new_branch_name]

Где:

  • «new_branch_name» – новое название ветки;
  • «old_branch_name» – старое название ветки.

Как удалить ветку git

Чтобы удалить локальную ветку в Git, используйте команду:

git branch -d [branch_name]

где branch_name — это имя ветки, которую вы хотите удалить.

Обратите внимание, что вы не можете удалить ветку, в которой находитесь в данный момент. Поэтому перед удалением вам нужно переключиться на другую ветку, например, master. Сделать это можно с помощью команды:

git checkout master

Если в ветке есть несохранённые изменения, то удалить её с помощью ключа «-d» не получится, так как Git защищает вас от случайной потери данных. Если вы уверены, что изменения не нужны и данные можно удалить, используйте команду:

git branch -D [branch_name]

где «branch_name» – это имя ветки, которую вы хотите удалить.

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

Как просмотреть состояния файлов ветки

Если переключиться на другую ветку, не сделав предварительно коммит, все незакоммиченные изменения будут перенесены в ту ветку, на которую вы переключились. Поэтому перед переходом необходимо убедиться, что все изменения в текущей ветке зафиксированы. 

Для этого используйте команду:

git status

Эта команда отображает текущее состояние вашего репозитория. Если все изменения зафиксированы, вы увидите сообщение:

On branch master
nothing to commit, working tree clean

Если вы создавали, редактировали или удаляли файлы и не закоммитили изменения, вывод будет примерно таким:

On branch master
Changes not staged for commit:

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

Как просмотреть истории коммитов ветки

Чтобы просмотреть истории коммитов, пропишите команду:

git log

Чтобы получить более конкретный вывод, можно использовать следующие опции:

  • «--author="имя-пользователя"» показывает коммиты, которые созданы заданным пользователем.
  • «--after="дата"» показывает коммиты, которые созданы после указанной даты.
  • «--before="дата"» показывает коммиты, которые созданы до указанной даты.
  • «--oneline» показывает укороченный вывод коммитов в одну строку, включая только хеш и заголовок.
  • «-p» выводит изменения, которые содержатся в каждом коммите.

Это лишь часть доступных опций. Полный список можно посмотреть с помощью команды:

git log --help

Как просмотреть различия между коммитами

Команда git diff в Git используется для отображения различий между различными состояниями репозитория. Она показывает изменения, которые были внесены в файлы, но еще не закоммичены, а также может сравнивать изменения между коммитами, ветками и другими объектами. 

Например, во время разработки часто возникает необходимость сравнить изменения между двумя коммитами перед тем, как что-то заливать:

git diff

Эта команда показывает изменения, внесенные в файлы, которые ещё не были подготовлены для коммита (не добавлены в индекс).

Чтобы сравнить изменения между двумя разными коммитами, используйте команду:

git diff [хеш_коммита1] [хеш_коммита2]