You can modify the ARM templates to use parameters for environment-specific values instead of hard-coded constants. This way, you can use the same ARM template across different environments by changing the parameters file according to the environment (DEV, UAT, PROD).
You can set up a CI/CD pipeline using Azure DevOps or GitHub Actions to automate the synchronization process.
My idea is you start by extracting the ARM template from the ADF instance after changes are made using the Azure Resource Manager.
Then you parametrize the template by replacing the environment-specific values with parameters.
Check the updated ARM template back into your source control system.
And finally, deploy the ARM template across various environments using different parameter files.
For Bicep, it supports modularization and parametrization, which helps you define resources in a cleaner, more reusable way. It also compiles down to ARM templates.
Always store your ARM templates or Bicep files in a version control system to track changes, manage versions, and revert to previous versions if something goes wrong.
If you are comfortable with ARM template toolkit, I recommend it : https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/test-toolkit
This toolkit can be used in your CI/CD pipeline to test the ARM templates for best practices and compliance before deployment.