Due to the complexity of the repository definitions in Bamboo I have implemented pretty much 2 models for merging:
- without task reordering - quite simple case, the merging is split in 2 phases: remove almost all tasks from the build configuration, keep checkout tasks, and second phase bring all other tasks from the template. This method works fine on simple jobs, when you have to template jobs that checkout code at the start of jobs.
- with task reordering - in this case the current tasks are backed up, everything is pulled from template and if the engine is finding a checkout task it will try to find its configuration in the backup.
In terms of timeline the first method was the original merging solution, the second solution was only recently implemented. In order to switch between merge engines you need to tick the "Attempt to maintain task order" checkbox under configuration.