Sadeep Sadeep - 1 year ago 65
Git Question

Working on multiple git branches that are dependent on each other

I'm maintaining 4 branches of a project on Git with a structure as below.

  • master

  • student

  • teacher

  • authentication

The problem is I created "authentication" branch the last and added some code from this branch. Now, I switched to "teacher" branch to continue working on it. However, I need some features I added in the "authentication" module to work on "teacher" module. But I'm not finished working on "authentication" module to do a merge. What's the correct way to handle this with git? Thanks.

Kos Kos
Answer Source

Sounds like your branches depend on each other and this is causing you problems. Branch depencencies can be caused by the branches getting bigger and bigger and containing too much stuff.

This means that you could benefit from merging smaller things earlier! However looks like you don't want to merge teacher or student to master before either is "complete".

Sounds like you need a place where you can merge the work that is done but might not be ready for a release yet.

If you're considering master to be a branch where only finished features go, maybe you need another branch called develop that is allowed to have not whole features, but smaller steps merged in?

Then you could do something like:

  • do some features related to teacher, merge them to develop
  • start a fresh branch for student-related features, merge them to develop too
  • repeat this until develop looks like something you could release
  • merge develop to master and add a tag a new release

This means that whatever system improvements you do during work on teacher, they will be also quickly available for you during work on student. Same applies to other functionality like authentication.

Don't let your feature branches stay unmerged for more than a few days.
Unmerged work is waste!

More reading: A successful Git branching model

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download