~/tmp/foo git init repo1 Initialized empty Git repository in /home/user/tmp/foo/repo1/.git/ ~/tmp/foo cd repo1 tmp/foo/repo1 ‹master› echo hi > hi tmp/foo/repo1 ‹master› git add hi tmp/foo/repo1 ‹master*› git commit -m hi [master (root-commit) d0cf572] hi 1 file changed, 1 insertion(+) create mode 100644 hi tmp/foo/repo1 ‹master› cd .. ~/tmp/foo git clone repo1 repo2 Cloning into 'repo2'... done. ~/tmp/foo cd repo1 tmp/foo/repo1 ‹master› echo hi2 > hi tmp/foo/repo1 ‹master*› git add hi tmp/foo/repo1 ‹master*› git commit -m hi2 [master 3a82bdc] hi2 1 file changed, 1 insertion(+), 1 deletion(-) tmp/foo/repo1 ‹master› git checkout -b someotherbranch Switched to a new branch 'someotherbranch' tmp/foo/repo1 ‹someotherbranch› git tmp/foo/repo1 ‹someotherbranch› echo otherchange > otherchange tmp/foo/repo1 ‹someotherbranch› git add otherchange tmp/foo/repo1 ‹someotherbranch*› git commit -m "otherchange" [someotherbranch 99ec880] otherchange 1 file changed, 1 insertion(+) create mode 100644 otherchange tmp/foo/repo1 ‹someotherbranch› cd ../repo2 tmp/foo/repo2 ‹master› git remote add upstream ../repo1 tmp/foo/repo2 ‹master› git fetch upstream remote: Enumerating objects: 8, done. remote: Counting objects: 100% (8/8), done. remote: Compressing objects: 100% (3/3), done. remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (6/6), 448 bytes | 448.00 KiB/s, done. From ../repo1 * [new branch] master -> upstream/master * [new branch] someotherbranch -> upstream/someotherbranch tmp/foo/repo2 ‹master› git checkout master Already on 'master' Your branch is up to date with 'origin/master'. tmp/foo/repo2 ‹master› git rebase upstream/master Successfully rebased and updated refs/heads/master. tmp/foo/repo2 ‹master› git switch someotherbranch branch 'someotherbranch' set up to track 'upstream/someotherbranch'. Switched to a new branch 'someotherbranch'