Files
aston-team-project/tutorials/git/GIT_BRANCH_DEPENDENCIES.ru.md
T

123 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Работа с зависимостями между Git-ветками
## Сценарий
Предположим, мы находимся в ветке:
```bash
feature/student
```
В этой ветке реализуется функциональность, связанная со `Student`.
При этом у нас появляется новая, независимая по смыслу фича:
```bash
feature/sorting
```
Для реализации сортировки нам необходим класс или интерфейс `Student`, который уже был создан в `feature/student`.
## Как создать новую ветку
Если нам необходимо продолжить разработку `feature/sorting`, используя текущее состояние `feature/student`, создаём новую ветку **от `feature/student`**.
Сначала переключаемся на `feature/student`:
```bash
git checkout feature/student
```
Затем создаём новую ветку:
```bash
git branch feature/sorting
```
После этого история будет выглядеть примерно так:
```text
feature/sorting
/
---------------●
\
feature/student
```
Обе ветки на момент создания указывают на один и тот же коммит.
Теперь в `feature/sorting` доступен весь код, который был добавлен в `feature/student`, в том числе `Student`.
Чтобы перейти в новую ветку:
```bash
git checkout feature/sorting
```
## Почему важно создавать ветку именно таким образом
В данном случае `feature/sorting` зависит от кода, находящегося в `feature/student`.
При этом сами фичи логически разные:
- `feature/student` — разработка `Student`;
- `feature/sorting` — реализация сортировки;
- `Student` нужен в `feature/sorting` как зависимость для реализации сортировки.
Поэтому не стоит продолжать разработку сортировки непосредственно в `feature/student`. Лучше создать отдельную ветку от того состояния, где необходимый код уже существует.
---
## Если ветки уже разошлись
Иногда невозможно создать `feature/sorting` непосредственно от нужного места в истории `feature/student`.
Например, `feature/sorting` уже была создана раньше:
```text
A---B---C---D feature/student
\
E---F---G feature/sorting
```
В таком случае можно получить изменения из `feature/student` посредством слияния (merge).
Находясь в `feature/sorting`, выполняем:
```bash
git checkout feature/sorting
git merge feature/student
```
История станет примерно такой:
```text
A---B---C---D feature/student
\ \
E---F---G---M feature/sorting
```
Коммит `M` — результат слияния двух веток.
После этого в `feature/sorting` будут доступны изменения из `feature/student`, в том числе необходимый `Student`.
## Главное правило
**Если новая фича зависит от кода из другой ветки, но при этом является самостоятельной по смыслу — создаём для неё отдельную ветку, используя нужную ветку как основу.**
Если новую ветку можно создать непосредственно от нужного состояния исходной ветки:
```bash
git checkout feature/student
git branch feature/sorting
```
Если ветки уже разошлись и создать её от нужного состояния невозможно:
```bash
git checkout feature/sorting
git merge feature/student
```
Таким образом, мы сохраняем логическое разделение фич и одновременно можем использовать необходимый код из другой ветки.