Managing multiple repositories for related projects can be challenging. A common solution is to combine them into one repository while preserving the commit history for each project. This guide explains how to move the contents of three repositories, OldRepo1, OldRepo2, and OldRepo3, into a new repository called NewRepo, with separate branches named BranchRep1, BranchRep2, and BranchRep3.

Initial Setup

Before starting the migration process, ensure you have a new repository (NewRepo) created and cloned locally:

git clone <NewRepo-repo-URL>
cd NewRepo

Next, initialize a main branch in NewRepo to serve as the base branch for future merges or comparisons:

git init
git checkout -b main
git push origin main

This ensures that your new repository is properly set up to handle incoming branches from other repositories.

Steps for Migration

Here is a step-by-step explanation of achieving this consolidation, including the commands and results at each stage.

Step 1: Adding the First Repository as a New Branch

Actions

Add the first repository (OldRepo1) as a remote:

git remote add OldRepo1 <OldRepo1-repo-URL>

Fetch the contents of OldRepo1:

git fetch OldRepo1

Create a new branch (BranchRep1) in your NewRepo from the main branch of OldRepo1:

git checkout -b BranchRep1 OldRepo1/main

Remove the remote for OldRepo1 after transferring its contents:

git remote remove OldRepo1

Push the new branch to NewRepo:

git push origin BranchRep1

Results

  • The BranchRep1 branch is created in NewRepo, containing the complete commit history from OldRepo1.
  • The remote link to OldRepo1 is removed to prevent accidental future fetches.

Repeat this process for the number of repositories you want to merge into the destination repository’s branch.

Summary

By following these steps, you successfully migrated the histories of OldRepo1, OldRepo2, and OldRepo3 into a single repository (NewRepo) with separate branches:

  • BranchRep1: Commit history from OldRepo1
  • BranchRep2: Commit history from OldRepo2
  • BranchRep3: Commit history from OldRepo3

The main branch is initialized to ensure the repository has a standard base branch for future development.

This approach ensures that the commit history of each repository is preserved while consolidating all projects into a single repository for streamlined management.

Resolving the “No Comparison” Error in Git Migration

If you encounter the error message “There isn’t anything to compare. main and UOG are entirely different commit histories” during a pull request, it typically means that the branches you are trying to merge (in this case, main and BranchRep1) have no common history. This can happen when the branches are created separately and have independent commit histories.

To resolve this, you can follow these steps:

Check out the branch to merge into (e.g., main):

git checkout main

Pull the latest changes:

git pull origin main

Merge the branches using the --allow-unrelated-histories flag:

git merge UOG --allow-unrelated-histories

This flag tells Git to allow the merging of two branches with completely different histories.

Resolve conflicts (if any) during the merge process, and commit the merge.

Push the changes to the remote repository:

git push origin main

By following these steps, you should be able to merge the two branches successfully, even though they have unrelated commit histories.

Categorized in:

Blog, Git,