Feature Branch
Every project has a feature branch that acts as the integration point for all migration work. This branch is shared across all target repositories in the project.- Default name:
morph-main - Customizable: You can change the feature branch name during project creation if your organization has naming conventions (e.g.,
feature/modernization,migration/java-to-kotlin) - Scope: The same feature branch name is used for all target repositories in the project
Project Start Point
At project creation time, records the commit SHA of each repository’s origin branch. This SHA marks the project’s starting point and serves as the baseline for tracking what has changed in the upstream mainline since the project began. You can click the icon next to the repo name (on the top left of the project page) to see those changes.Upstream Changes
As your team continues pushing changes to the repository’s mainline during the migration, makes it easy to stay aware of what’s changed. Viewing upstream changes: On the project page, below the project title, you can see a list of all project related repos with a diff icons (). Click it to see all upstream commits pushed to the repository’s mainline since the project started (i.e., since the recorded start SHA).Upstream Sync
Between milestones, you can trigger an upstream sync to incorporate mainline changes into your migration. This is useful when significant upstream work has landed and you want the migration to stay aligned with the latest codebase state. When triggered, upstream sync will:- Update the project’s starting SHA to the current mainline HEAD
- Create an ad-hoc sync milestone that follows the standard milestone procedure—including code review, functional testing, and PR creation
- Rebase any in-progress milestone branches so they incorporate the new baseline
- Adjust the plan for upcoming milestones to account for the upstream changes
Upstream sync is not supported in projects that were created before this feature was introduced. Only projects created after upstream sync became available can use it.
Milestone Branches
Each milestone gets its own branch, branched off from the feature branch:- Naming format:
<project_name>-milestone_<milestone_number>-<uuid> - Example:
payments-api-migration-milestone_3-a1b2c3d4
- creates the milestone branch from the feature branch
- The agent commits all task work to this branch
- On completion, creates a PR from the milestone branch → feature branch
- You review and merge the PR
- Dependent milestones are unlocked; sibling milestone branches may receive a rebase if they share dependencies with the merged code
End-of-Project PR
When all milestones are complete and merged into the feature branch, creates a final Pull Request from the feature branch to the target branch:- Default target: The repository’s default branch (e.g.,
main,master) - Customizable: You can select a different target branch during project creation if needed
Branch Flow Diagram
Supported Git Providers
supports all major Git providers:GitHub
GitHub.com integration via GitHub App
GitLab
GitLab.com integration via OAuth
Azure DevOps
Azure DevOps Services via Microsoft Entra ID
Summary
Related Docs
Reviewing Pull Requests
How to review and merge milestone PRs
Core Concepts
Project setup and branch strategy overview
Roadmap
How your migration is organized and tracked
Milestones & Tasks
The milestone execution lifecycle