У меня была бы общая ветвь знаменателя, например, "развернуть", где все мои функциональные ветви ответвляются от.
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^
и у вас есть индекс, который был до того, как вы сделали коммит. Затем просто переключитесь на другую ветку и зафиксируйте ее там.