Ответ 1
Я собирался написать свой ответ, но потом нашел этот отличный ответ (и отличный вопрос). Это не дает вам одного способа сделать что-то, но после тщательного чтения вы должны найти рабочий процесс, который подходит для вашей ситуации.
В текущем проекте, над которым я работаю, я пытаюсь исследовать множество различных идей, которые обычно проявляются как куча ветвей функций. Функции, над которыми я работаю, обычно ортогональны друг другу, поэтому есть моменты, когда я хочу объединить все эти функции (или некоторые подмножества функций) и проверить их вместе.
До сих пор мой рабочий процесс был таким: у меня есть ветки featureA
, featureB
, featureC
, и у меня будет ветвь с именем featureA_featureB
, а затем другая, например featureA_featureB_featureC
и т.д.
У меня возникают две проблемы:
featureC
, но поскольку я в ветке featureA_featureC
, я случайно беру на себя эту ветку (мне действительно нужно прекратить использование git commit -a
). Затем я должен вишни выбрать фиксацию или сделать некоторые другие сумасшедшие вещи, чтобы получить фиксацию в нужном месте.Спасибо заранее!
Я собирался написать свой ответ, но потом нашел этот отличный ответ (и отличный вопрос). Это не дает вам одного способа сделать что-то, но после тщательного чтения вы должны найти рабочий процесс, который подходит для вашей ситуации.
У меня бы была общая ветка знаменателя, например, "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^
и у вас есть индекс так, как это было до того, как вы совершили коммит. Затем просто переключитесь на другую ветку и скопируйте там.