This is an old revision of the document!
starting a new remote branch
In the examples below, there is a shared repo (shared), a user1 (doing the branch changes), and a user2 (needs to pull the branch changes).
Method 2 may be better for you if the branch already exists locally, and you need that history pushed to the shared repo.
method 1: push a new branch directly to the shared repo
- shared repo has one branch: master
- user1 pushes a new branch (dev) to the shared repo
$ git push origin origin:refs/heads/dev
- user1 now has the following branches locally:
$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/master
- user1 now must create a local branch which is set to “track” the new remote branch:
$ git checkout --track -b dev origin/dev $ git branch -a * dev master remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/master
- user2 can pull changes to see the new branch, then use the same command as user1 to create a local branch and track the remote branch:
$ git pull From /path/to/shared/repo * [new branch] dev -> origin/dev Already up-to-date. $ git checkout --track -b dev origin/dev $ git branch -a * dev master remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/master
method 2: start a local branch and push it to the remote
- shared repo has one branch: master
- user1 creates a new local branch called dev
$ git checkout -b dev
- push the new local branch to the shared repo:
$ git push origin dev
- but wait - even though user1 created the branch and pushed it to the remote, the local branch is not yet tracking the shared branch
- option 1 - delete the local branch and create it again with –track
$ git checkout master $ git branch -D dev $ git checkout --track -b dev origin/dev
- option 2 - manually edit your .git/config by adding lines similar to the following
[branch "dev"] remote = origin merge = refs/heads/dev
- user2 can pull changes to see the new branch, then use the same command as user1 to create a local branch and track the remote branch:
$ git pull From /path/to/shared/repo * [new branch] dev -> origin/dev Already up-to-date. $ git checkout --track -b dev origin/dev $ git branch -a * dev master remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/master