Подтвердить что ты не робот

Git Дисциплина: объединение нескольких ветвей функций, но все же их разделение?

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

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

У меня возникают две проблемы:

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

Спасибо заранее!

4b9b3361

Ответ 1

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

Ответ 2

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

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^

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