Search code examples
gitversion-controlbranch

How to properly use Git and branches


I'm kind of new to version control with Git. I read this guide and am following the basic approach that is shown in the diagram here. Still, I have some doubts about how to use Git branches to separate the development of new features from existing code.

Here is an example. Suppose that at the start, my repository contains the following two main branches:

  • Master branch (containing the release version)
  • Develop branch (containing new fixes or features to separate them from existing project features)

When I need to develop new features or modules, I create branches from Develop and start the new code projects there. For example, I make three new branches to add features related to Sun, Star, and SuperNova. Now, my repository contains five branches:

  • Master branch: Release 1.0.0
  • Develop branch: Modification after release 1.0.0
  • NewModule_Sun branch: add Sun to project (create from Develop branch)
  • NewModule_Star branch: add Star to project (create from Develop branch)
  • NewModule_SuperNova branch: add SuperNova to Project (create from Develop branch)

For Release 1.0.1, I want to include the the Sun and Star modules, but not SuperNova. So, I merge them with Develop and then merge Develop with the Release:

  1. Merge NewModule_Sun into Develop
  2. Merge NewModule_Star into Develop
  3. Merge Develop into Master (release 1.0.1)

The Develop branch needs to be kept permanently, but the Sun and Star branches are no longer needed. They get deleted:

  1. Delete the NewModule_Sun branch
  2. Delete the NewModule_Star branch

After these changes my repository contains the following three branches:

  • Master Branch: Release 1.0.1
  • Develop Branch: Modification after release 1.0.1
  • NewModule_SuperNova branch: Modification after release 1.0.0 (created from Develop when it was not merged with the Star/Sun branches)

==

Firstly, am I using Git branches correctly?

Secondly, I reviewed the history of the final Develop branch, and it seems that I have lost some information on the NewModules. Is that normal? And, is it possible to transfer all the history information to the Develop branch?


Solution

  • Am I doing a propery use of git?

    Yes the workflow that you describe is pretty much standard workflow. You create some branch, you work on it and when you're done you merge it and remove the not needed branch (unless you are going to continue developing on that branch).

    After removing a branch, viewing the history it seems to me that I have lost every information about the branch itself... is that normal?

    Yes this is normal.

    is it possible to remove a branch but leaving the history information unbroken?

    Not sure what you mean here. As long as you have merged the branch before deleting it, the history is still there. You just merged it into another branch and the history can be seen on that branch. There is no way to know when a branch was deleted if that's what you are asking for.