If you get to a point where you want to flash, but want to archive a copy of the original, you can clone the rootfs first. The clone can be loopback mounted and used as a source to rsync into the new system (useful for things like home directory sync for GUI settings, or “/etc” for things like ssh keys and other “/etc” changes).
When you go to flash you can save an old “bootloader/system.img.raw” to re-use…this too can be loopback mounted, edited, so on…clone and system.img.raw are the same thing at different points in time. The actual flash comes from the sparse/compressed version, system.img, but if you copy the system.img.raw to that name, this also works (original flash did not use sparse files, non-sparse still works if it is named system.img). The flash.sh option to re-use system.img is “-r”. The reason this is interesting for your case is because you can also rsync between loopback mounted images…if you migrate from something like R27.0.1 to R27.1 you can’t re-use the existing clone, but you can rsync to update parts of a clone or old system.img.raw into another clone or system.img.raw of different version.
Once I get things where I want I create a clone. I also back up certain files for overlay onto any revision…my ssh keys, networking, and logins for example remain constant regardless of major version flash.