That whole section talks about feature branches that aren’t integrated for long periods of time, possibly until release. What about times when the integration period is days or even hours long?
In my work place, there are a couple dozen programmers and letting everyone commit on one branch seems like a horrible idea. It’ll certainly make tracking a feature’s history painful and there’s always a chance the feature will get cancelled. Instead we have feature branches that are worked on only by the programmers assigned to the feature.
The difference is that we integrate constantly to a staging branch, which is accessible only by the integration server. Any time there’s enough working code to showcase, the programmer “ships” it to the integration server, with any conflict resolutions necessary in a side branch. The server will merge the branch to staging only if after the merge all the tests continue passing. If something breaks down, all that happens is that the programmer gets an alert with full logs on what went broke.
There are sometimes problems where features clash, but then either a test fails, or the POs notice it when trying the feature on the staging build, just like any other unwanted behavior.
Integration into production and release happens only to feature branches that passed through staging and were deemed ready.