gitbranchgit-track

How to keep track of origin/master in my dev git branch


I am new to git and I would like to know how to tackle a very basic scenario. I read so many posts on stackoverflow about git but still can't figure out the answer.

We have an origin/master remote branch that everybody is working on. I have a featureA that I want to implement and might take time to develop. Meanwhile, people might be checking in code to the origin/master.

What would my workflow look like and how should I go about setting up my git branch, given the following needs:

  1. I want to be able to commit code changes to my branch and push them to a remote branch on our server so I don't loose the changes in case my computer is fried.

  2. I want to keep my branch up-to-date with the master branch.

  3. I want to minimize regular merges. I like to concept of git rebase so I would like to maximize its use and hence fast-forward merges.

  4. At some point we will have to merge my branch FeatureA into origin/master.

Summarizing:

How do I setup a branch that pulls from origin/master but pushes to origin/MY-BRANCH?

What would my workflow look like?

UPDATE:

Thank you @will-pragnell! What is the difference between your solution and the following.

This page on github suggest:

https://github.com/diaspora/diaspora/wiki/Git-Workflow

In order to get the latest updates from the development trunk do a one-time setup to establish the main GitHub repo as a remote by entering:

$ git remote add upstream git://github.com/diaspora/diaspora.git
$ git fetch upstream
$ git checkout master
$ git rebase upstream/master
$ git checkout 100-retweet-bugfix

[make sure all is committed as necessary in branch]

$ git rebase master

Solution

  • You probably don't want a branch that pulls from master and pushes to your own branch. What you want is to pull from master on to your local master, handle rebasing locally, and then push to your own remote branch for the feature. This is a fairly standard workflow and gives you complete control and a minimal amount of merging. Personally I would do it like this:

    Create a new local branch

    git checkout -b myFeature
    

    Push that to a new remote branch (see this stackoverflow question if you need more info on this step)

    git push origin myFeature
    

    Now you can work away hapily on the myFeature branch, pushing using the above command when you need to without messing up the master branch. When you need to get hold of commits that others have done on master, you can do so like this:

    git checkout master
    git pull (this will just fast-forward if you don't make any local changes to master)
    git checkout myFeature
    git rebase master
    

    When your feature is finished, you can the merge or rebase your branch back in to master so that everyone else gets your new feature. Like this:

    git checkout master
    git merge myFeature
    git push origin master