We want to keep our story clean and clear, and therefore fairly linear. Therefore, we configured Gerrit to use only fast merge. The only visible merges are for the release and support branches (we use git -flow), which greatly simplifies understanding.
However, we have a plugin with a trivial update, so the previous review status is automatically applied to the changed change. This happens regardless of whether a reboot is performed in Gerrit (using the Rebase button) or when the developer reboots locally and then clicks on the change again.
In our experience, merge conflicts are actually less common in a large project due to the much larger number of source files. We have about 16,000 files in the repo and 30 full-time or part-time developers, so the likelihood of editing the same file is pretty low.
In any case, if two developers make changes to the same part of the same file, they really should talk to each other. If the project architecture requires frequent changes in one file (for example, some kind of registration table), you need to change the architecture, use something like dependency injection, or automatically generate this source file from fragments as part of the assembly.
Neil mayhew
source share