private function interactiveCommitRelease(OutputInterface $output, array $commit, array $components)
    {
        $commitRelease = $this->processCommit($output, $commit, $components);

        $proceed = false;
        do {
            $this->displayCommitSummary($output, $commitRelease);

            $output->writeln('');

            $choices = [
                'Proceed without changes',
                'Change Release Message',
                'Change Release Type to Patch',
                'Change Release Type to Minor',
                'Change Release Type to Major',
                'Start over'
            ];
            $q = $this->choice('Choose an action', $choices, $choices[0]);

            $action = $this->askQuestion($q);
            $action = $this->removeDefaultFromChoice($action);

            switch ($action) {
                case $choices[0]:
                    $proceed = true;
                    break;

                case $choices[1]:
                    $commitRelease = $this->handleChange($output, $commitRelease);
                    break;

                case $choices[2]: // patch
                    $commitRelease = $this->handleChange($output, $commitRelease, self::LEVEL_PATCH);
                    break;

                case $choices[3]: // minor
                    $commitRelease = $this->handleChange($output, $commitRelease, self::LEVEL_MINOR);
                    break;

                case $choices[4]: // major
                    $commitRelease = $this->handleChange($output, $commitRelease, self::LEVEL_MAJOR);
                    break;

                case $choices[5]:
                    $commitRelease = $this->processCommit($output, $commit, $components);
                    break;
            }
        } while (!$proceed);

        $output->writeln('');

        return $commitRelease;
    }