Git Discipline: объединение нескольких ветвей функций, но при этом разделение их? - PullRequest
23 голосов
/ 22 февраля 2011

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

Пока мой рабочий процесс такой: у меня есть ветви featureA, featureB, featureC, и у меня будет ветвь с именем featureA_featureB, а затем еще одна, например featureA_featureB_featureC и т. Д.

У меня 2 проблемы:

  • Схема именования является чрезвычайно громоздкой и порождает много беспорядка ветвей
  • Поскольку я тестирую ветку с объединенными воедино функциями, я склонен случайно фиксировать ветку комбинации, а не отдельную ветку. Так, например, я думаю об улучшении до featureC, но, поскольку я нахожусь в ветви featureA_featureC, я вместо этого случайно фиксирую эту ветку (мне действительно нужно прекратить использовать git commit -a). Затем я должен выбрать коммит или сделать что-нибудь другое, чтобы доставить коммит в нужное место.
  • Я просто чувствую, что есть какой-то лучший способ сделать это ...

Заранее спасибо!

Ответы [ 3 ]

9 голосов
/ 22 февраля 2011

Я собирался написать свой собственный ответ, но потом я нашел этот отличный ответ (и отличный вопрос). Это не дает вам единого способа сделать что-то, но после внимательного прочтения вы сможете найти рабочий процесс, который подходит вашей ситуации.

4 голосов
/ 27 апреля 2011

У меня была бы общая ветвь знаменателя, например, "развернуть", где все мои функциональные ветви ответвляются от.

develop
|----featureA
|----featureB
|----featureC

Затем, когда вы захотите что-то протестировать, просто объединитесь из ветвей функций в разработку в нужной вам комбинации, например,

git checkout develop
git merge featureA featureB
./test.sh

И сохраняйте коммит, если вы довольны тестом. Если не делать

git reset --hard HEAD^

и вы вернулись, чтобы развиваться так, как было до слияния. Таким образом, вам нужны только ваши ветви функций, и вы можете экспериментировать с ними в любых комбинациях. Просто помните, что, если вы совершили что-либо, вы ВСЕГДА можете вернуться в это состояние, проверив reflog.

А для вашего git commit -a problems сделайте

git reset --soft HEAD^

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

0 голосов
/ 01 марта 2018

В Git есть несколько способов интегрировать изменения из одной ветви в другую : объединять ветви, перебазировать ветви или применять отдельные коммиты из одной ветви в другую (cherry-pick).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...