@embiid

Как сделать merge в ветку git-flow?

Вкратце расскажу ситуацию:

1 - Есть master -> README.md;
2 - Создал в репозитории ветку developer
3 - От developer создал в ветке feature -> feature_some1

Проблема:
1) На gitlab вижу что у меня есть master и feature/feature_some1 (НО! нет developer, получается, что я не запушил developer?!)[Через git branch вижу что есть developer, тоесть он локально?]

2) Теперь хотел сделать merge feature_some1 к developer
(Получаю ошибку working tree contains unstaged changes. aborting. git flow)
[Я так понимаю, что он не хочет merge, потому что локально есть файлы незакомиченные?]

Вопрос:
1) Как мне можно запушить deloper на gitlab/github ?
2) Как мне у feature создать новую ветку feature_some2 ?
(Можно ли так же делать, что бы в feature были и feature_some1 и feature_some2 ?)
[то есть, сейчас локально так:
developer -> feature
feature -> feature_some1
хочу -> feature_some2
]
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
sergey-kuznetsov
@sergey-kuznetsov
Автоматизатор
1) По умолчанию, git push отправляет на сервер только одну ветку — текущую.
Чтобы отправить ветку developer, сначала переключитесь на неё.
git checkout developer
git push -u

Либо можно не переключаться, но явно указать, что и куда отправить
git push -u origin developer
Эта команда говорит: возьми ветку developer и отправь в репозиторий origin.
Флаг -u нужен чтобы сразу связать локальные ветки с создаваемыми удалёнными.

Хотя можно сказать гиту, чтобы он отправил сразу все локальные ветки
% git push -u --all 
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/.../repo.git
 * [new branch]      developer -> developer
Ветка «developer» отслеживает внешнюю ветку «developer» из «origin».
Ветка «feature/feature_some1» отслеживает внешнюю ветку «feature/feature_some1» из «origin».
Ветка «feature/feature_some2» отслеживает внешнюю ветку «feature/feature_some2» из «origin».
Ветка «master» отслеживает внешнюю ветку «master» из «origin».

Но если у вас есть локальная ветка, которую вы не хотите светить на сервере, то флаг -all не подойдет ))

2) Синтаксис названия feature/feature_some1 это не две ветки, feature и вложенная feature_some1
Это всё равно одна ветка. Но в графических клиентах такие ветки отображаются как вложенные, для удобства.
Создав вторую ветку с именем feature/feature_some2 получим такую картинку

604841b7bfdc2368381419.png
Но никакой ветки feature не существует.
% git branch    
  developer
  feature/feature_some1
* feature/feature_some2
  master


3) Как сделать merge в ветку developer?
Перед слиянием убедиться, что рабочая копия не имеет незакоммиченных изменений.
Либо дропните незафиксированные правки либо создайте коммит с ними.
Иначе git не знает что с ними делать и выдал вам ошибку.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
А нужен ли вам git-flow?
Насколько я понимаю, опыта в git у вас почти нет, но вы собираетесь применить сразу энтерпрайз-решение. git-flow подразумевает использование релизов. В связи с этим и строится набор веток и их взаимодействие. В подавляющем большинстве случаев релизы не нужны, а значит и процесс будет другим.
Упрощенный процесс хорошо расписал опытный человек здесь: https://qna.habr.com/answer?answer_id=1552111#answ...
Это работает даже если у вас в команде несколько человек, не говоря уже об одном разработчике. Проверено на себе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы