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

git branch — список веток

Показывает все ветки в репозитории. Текущая ветка отмечена звёздочкой *.

git branch

Пример вывода:

  main
* feature/login-screen
  bugfix/button-color

Здесь вы находитесь в ветке feature/login-screen.

Чтобы увидеть только удалённые ветки (на сервере):

git branch -r

Чтобы увидеть все ветки — локальные и удалённые:

git branch -a

git checkout — переключение между ветками

Переключает рабочую директорию на указанную ветку.
Изменения в файлах сохраняются, если они не конфликтуют.

git checkout feature/login-screen

Если ветка ещё не существует локально, но есть на сервере — можно создать и переключиться сразу:

git checkout feature/login-screen
# если ветка не найдена локально — выдаст ошибку

Чтобы создать новую ветку и сразу переключиться:

git checkout -b feature/auth-google

checkout — многофункциональная команда: она может переключать ветки, восстанавливать файлы, и даже переходить к коммитам. Это может запутать новичков.


git switch — альтернатива checkout для переключения

Появилась в Git 2.23 как более понятная альтернатива для переключения веток.
Работает только с ветками — меньше шансов ошибиться.

git switch feature/login-screen

Создать новую ветку и переключиться:

git switch -c feature/auth-google

✅ Рекомендуется использовать git switch для переключения между ветками.
Оставьте git checkout только для восстановления файлов или перехода к старым коммитам.


git merge — объединение веток

Объединяет изменения из одной ветки в текущую.
Работает только после переключения на целевую ветку.

Пример: вы закончили работу в feature/login-screen и хотите добавить изменения в main.

git switch main
git merge feature/login-screen

Если изменений нет в конфликте — Git сделает быстрое слияние (fast-forward).
Если в main были новые коммиты — Git создаст отдельный коммит слияния.

Пример вывода после успешного слияния:

Updating a1b2c3d..f9e8d7c
Fast-forward
 src/screens/Login.js | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
 create mode 100644 src/screens/Login.js

Если возникает конфликт — Git остановится и попросит вас разрешить его вручную.
Файлы с конфликтами будут помечены специальными маркерами:

<<<<<<< HEAD
<Text>Войти</Text>
=======
<Text style={styles.bold}>Войти</Text>
>>>>>>> feature/login-screen

Разрешите конфликт — удалите маркеры, оставьте нужный код — затем:

git add src/components/Button.js
git commit

⚠️ Не делайте слияние в main с незавершёнными или неотлаженными фичами.
Всегда тестируйте ветку перед слиянием.