Ответ 1
В описанном вами случае, когда все фиксации на промежуточной ветке также находятся на главной ветке, это очень просто:
git checkout staging
git merge master
git checkout master
git reset --hard c7-hash
Слияние будет быстрой перемоткой вперед.
В общем случае вы можете использовать git cherry-pick c8 c9 c10 c11 c12 c13 c14 c15
для вишни выбрать отдельные фиксации для текущей ветки. Более короткий путь к вишне выбрать все коммиты, которые находятся на главном, но не текущая ветвь git cherry-pick ..master
, и есть другие примеры, показанные git help cherry-pick