Skip to content

Instantly share code, notes, and snippets.

@tjbenton
Last active April 18, 2017 01:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tjbenton/e95ca1d511cb25d57b16ec3f35d34295 to your computer and use it in GitHub Desktop.
Save tjbenton/e95ca1d511cb25d57b16ec3f35d34295 to your computer and use it in GitHub Desktop.
Sync your fork with the original package

If you know you've already added the upstream repo then skip to step 5

  1. cd to the working directory
  2. List the current configured remote repository for your fork.
git remote -v
# origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
# origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
  1. Specify a new remote upstream repository that will be synced with the fork.
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
  1. Verify the new upstream repository you've specified for your fork.
git remote -v
# origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
# origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
# upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
# upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)
  1. Fetch the branches and their respective commits from the upstream repository. Commits to master will be stored in a local branch, upstream/master.
git fetch upstream
# remote: Counting objects: 75, done.
# remote: Compressing objects: 100% (53/53), done.
# remote: Total 62 (delta 27), reused 44 (delta 9)
# Unpacking objects: 100% (62/62), done.
# From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
# * [new branch]      master     -> upstream/master
  1. Check out your fork's local master branch.
git checkout master
# Switched to branch 'master'
  1. Merge the changes from upstream/master into your local master branch. This brings your fork's master branch into sync with the upstream repository, without losing your local changes.
git merge upstream/master
# Updating a422352..5fdff0f
# Fast-forward
# ...it will show all the changes that take place...

Here's the code condensed in to a block you can copy and paste into terminal (after you change the repos, and are already in the working directory)

git remote add upstream [ORIGINAL REPOSITORY]
git fetch upstream
git checkout master
git merge upstream/master
git push origin master -f

You can always add this to your bash functions

upstream-merge() {
  [[ $@ == *"https://"*".git" ]] && URL="$@" || URL="https://github.com/$@.git"
  if [[ !$(git remote -v | grep $URL) ]]; then
    git remote rm upstream
    git remote add upstream "$URL"
    echo "added $URL to upstream"
    git remote -v
  fi
  git fetch upstream
  git checkout master
  git merge upstream/master
}

You could also just add it to your .gitconfig file as an alias

[alias]
  ...
  upstream-merge = "!f() { [[ $@ == *\"https://\"*\".git\" ]] && URL=\"$@\" || URL=\"https://github.com/$@.git\"; [[ !$(git remote -v | grep $URL) ]] && git remote rm upstream; git remote add upstream \"$URL\"; echo \"added $URL to upstream\"; git remote -v; git fetch upstream; git checkout master; git merge upstream/master; }; f"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment