Automating the sequential merging of all our feature branches into a temporary integration branch. The script starts by prompting you for two inputs: the command to run our project's tests (like npm test or ./run_tests.sh), and an optional custom name for the temporary integration branch—defaulting to temp-integration-branch if you leave it blank.
Here's what the script does:
Branch Ordering: It gathers all local Git branches except master, sorting them by their creation date to process the oldest branches first. This ensures that we integrate changes in the order they were developed.
Integration Loop: For each branch in this list, the script:
- Checks out the
masterbranch and creates or resets the temporary integration branch. - Merges the current feature branch into the temporary integration branch without committing, allowing us to inspect changes before they are finalized.
- Lists all files changed in the merge, giving us immediate visibility into what's being introduced.
- Commits the merge to the temporary branch.
Testing After Merge: It then runs the test command you provided earlier. If the tests pass:
- The script records the merge commit hash, which is useful for potential reverts.
- Proceeds to the next branch to continue the integration process.
- Outputs a command to revert the merge if needed.
If the tests fail:
- The script automatically reverts the merge to keep the temporary branch in a stable state.
- Stops the integration process to prevent cascading failures, allowing us to address the issue before moving on.
Logging and Output: All output from the script—including prompts, merge details, test results, and any error messages—is logged both to the console and to a timestamped log file in the current working directory (e.g., rebase_session_2023-10-14_15-30-00.log). This comprehensive logging is crucial for auditing and debugging purposes.
Exit Message: Upon completion or if the script exits due to an error, it displays a clear, red underlined message indicating where the session log has been saved. This ensures that we always know where to find the detailed logs for that session.
Revert Instructions: After all branches have been processed, the script provides a list of git revert commands in reverse order. This is particularly helpful if we need to undo the merges due to unforeseen issues.