We use the following best practices to develop new features, or fix critical issues in the live site without unintentionally affecting other areas of the project.
- Main branches. Typically, we use two main branches – the master branch and a develop branch. The master branch always reflects a production ready state and releases are tagged from master. The develop branch is an integration branch. We perform automated testing on this brand and it always reflects a state with the latest delivered changes and updates for the next release. Branches are never modified directly.
- Supporting branches. These include feature branches, release branches, and hotfix branches. Feature branches are created from the develop branch and are used to develop new features. Release branches are also created from the develop branch, supports preparation of a new production release, and allows the develop branch to receive updates. The hotfix branch is created from the master branch and is used when changes on develop are not release-ready and a fix to production is required that cannot wait until the upcoming release is stable.
- Branching and marching. The feature branches branch off from develop and merge back into develop. Release branches branch off from develop and merge back into develop and master. Hotfix branches branch off master and merge back into develop and master.
- Smart Commits. Smart commits are an important method of documentation for software development, release management, and DevOps. Smart Commits enable better traceability and documentation built into the releases. They also assign responsibility and ownership to code, which tends to increase quality because developers know their name is assigned to the ticket and they will be held responsible for its defects.
- Pull requests. Pull requests are a feature that makes it easier for developers to collaborate in Git repositories. They let you tell others about changes you've pushed to a repository and discuss proposed changes before integrating them into the official project. This is a great way to keep everybody in the team posted about any release and avoid disconnections. This also gives the responsibility to the entire team about the release, not just to one individual.