feat: initial commit to master. When pushing that commit, semantic-release will release the version 1.0.0 and make it available on the default distribution channel which is the dist-tag @latest for npm.fix: a fix to master. When pushing that commit, semantic-release will release the version 1.0.1 on the dist-tag @latest.next and commit our feature to this branch. When pushing that commit, semantic-release will release the version 2.0.0 on the dist-tag @next. That means only the users installing our module with npm install [email protected] will receive the version 2.0.0. Other users installing with npm install example-module will still receive the version 1.0.1.2.0.0 release and reports a bug. We develop a bug fix and commit it to the next branch with the message fix: fix something on the big feature. When pushing that commit, semantic-release will release the version 2.0.1 on the dist-tag @next.next only a subset of users would get it, and we would need to wait for the end of our feedback period in order to make both the big and the small feature available to all users.master with the message feat: a small feature. When pushing that commit, semantic-release will release the version 1.1.0 on the dist-tag @latest so all users can benefit from it right away.@next dist-tag. To do so we need to merge our changes made on master (the commit feat: a small feature) into next. As master and next branches have diverged, this merge might require to resolve conflicts.next, semantic-release will release the version 2.1.0 on the dist-tag @next which contains both our small and big feature.@next dist-tag we feel confident to make our big feature available to all users. To do so we merge the next branch into master. There should be no conflict as next is strictly ahead of master.master, semantic-release will add the version 2.1.0 to the dist-tag @latest so all users will receive it when installing out module with npm install example-module.master, or a new breaking change on next as we did before.