Skip to main content

Currently, I have a situation where I have two repositories.  The first is where I've held the code since the beginning.  The second has come on board recently and is the client repo.  However, rather than shut the original down, I want to keep both running with the same code.  How do I synchronise them so that they contain the same thing?

Configure a remote that points to the upstream repository in Git to sync changes you make in a fork with the original repository.  Allowing me to sync changes made in the original repo.

Setting up

Open a terminal and point the working directory to the project you want to work on.  The list of the current configured remote repository for your fork.

command:
git remote -v

response:
origin	git@github.com:2yellowdots/{project}.git (fetch)
origin	git@github.com:2yellowdots/{project}.git (push)

Upstream

Specify a new remote upstream repository that will be synced with the fork.

git remote add upstream https://github.com/{owner}/{project}.git

So I used:

git remote add upstream https://github.com/2yellowdots/{project}.git

Verify the fork

Verify the new upstream repository you’ve specified for your fork.

command:
git remote -v

response:
origin	git@github.com:2yellowdots/{project}.git (fetch)
origin	git@github.com:2yellowdots/{project}.git (push)
upstream	{username}@{domain}/{path} (fetch)
upstream	{username}@{domain}/{path} (push)

Fetch upstream branches and commits

Fetch the branches and their respective commits from the upstream repository.  Commits to main will be stored in a local branch, upstream/main.

command:
git fetch upstream

response:
warning: no common commits
remote: Repos
remote: Found 3 objects to send. (63 ms)
Unpacking objects: 100% (3/3), 738 bytes | 369.00 KiB/s, done.

Checkout

Check out your fork’s local main branch.

command:
git checkout main

response:
Switched to branch ‘main’

Merge

Merge the changes from upstream/main into your local main branch.  This brings your fork’s main branch into sync with the upstream repository, without losing your local changes.

command:
git merge upstream/main

response:
fatal: refusing to merge unrelated histories

Ok, a block in the road.  I work through this issue by adding

--allow-unrelated-histories

So the command became

git merge upstream/main --allow-unrelated-histories

response:
Merge made by the 'ort' strategy.
 README.md | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
 create mode 100644 README.md

Push

Finally, not that there have been too many steps... push your changes

command:
git push origin main

 

How to push code to multiple remotes simultaneously

Next steps... maybe you are looking for a way to push multiple remotes at the same time.  We call remote repositories remotes in git.  Group multiple remotes using git config.  Sometimes you may need to push changes to multiple remotes like GitHub and Bitbucket etc.

Adding the common remote all - Allows us to push both at the same time

git remote add all remote_1_url
git remote set-url --add --push all remote_2_url
git remote set-url --add --push all remote_1_url

Pushing to remotes

# To origin
git push origin main
# To upstream
git push upstream main
# To ALL
git push all main

You can always push to multiple remote repos without grouping them using formal bash syntax

git push origin main && git push upstream main 

 

Remove remote Urls

git remote rm {{REMOTE-NAME}}

 

Related articles

Andrew Fletcher28 Aug 2024
Troubleshooting PHP 8.3 mbstring issues on Ubuntu with Nginx
Maintaining a Drupal site is usually smooth sailing once the environment is properly set up. However, even in a stable environment, updates to modules can sometimes reveal underlying configuration issues that weren't apparent before. This was the case when I updated a contrib module on a Drupal 10.3...