I am very new to the Adaptive form technology. And I am wondering if there is a version control for the adaptive forms if I ever need to revert back. Also, how can I set up automatic backup of my forms? Seems like I can export it out, but I want to set an auto back up and be able to retrieve it if I need to.
If you require a version history to be always usable then I would suggest not using shared form fragments. Once a fragment is shared between two forms then you lose the ability to restore a form backwards in time since restoring it will restore the fragment and then affect any other forms that rely on that fragment. You could treat all forms as one backup version meaning restoring a single form will also restore all forms, then at least your forms that share fragments will be consistent to a known point in time, but this may not be desirable.
The simplest way, is as you suggest by using form backup or just Downloading the Form . If you are not using code (Git + Maven) to create your Form source of truth, then I would keep a copy of the form and all of its assets by downloading and adding a date to the file name.
You can also create these packages using the Package Manager GUI  and then take regular versioned copies of them manually using Package Manager or even automatically using cron, curl and the AEM API to build and export the packages to a repository .
For  and  solution, it seems like those are all manual backup and it is ad-hoc. Or am I understanding it incorrectly.
My issue is that if I made three different modifications to the adaptive form at 4PM, but my manager decided to go back to what we have on the 2nd modifications. But I didn't make a backup each time. How can I restore back? In the JEE, it has a nice version control in Workbench where I can revert back easily after each check in. How do I do this? Or do I need to save a package manager each time?
You are correct - these backup solutions are all manual workarounds. Unfortunately, AEM Forms doesn't version each time you make a change so you will have to manually revert your changes back.
If you are creating and modifying forms on the Production Author, I would create a versioned package in Package Manager and get into the habit of re-building the package before you start work then changing the version and building the package when you finish. You don't need to store it anywhere, you can just leave it in the repository. This will allow you to revert back a group of changes to a previous packaged version easily. AEM stores the different versions each time it is built.
With a project that requires actual testing and version control, we usually develop the forms in a development environment and use source control like Git to manage the forms as code + content. This code + content is then pushed through DEV to TEST and eventually onto PROD. This way we can revert back to any of our local development history as you can with Workbench, but its a longer, more complicated process. The down side is using a development source-controlled forms environment prevents business users from modifying the forms as the source of truth is now the Git repository and not Production Author.
Very well collated by DarrenBiz above, to add further you may use the existing utility of 'online backup' to create back of your whole CRX. Now, this would run in the background so no downtime would be required but since we are making the backup of CRX the restore point would revert the CRX to last saved backup. Segregation is not possible in this case.
I feel you may go with a mix of Package Manager and downloading  approach depending on the number of forms to be kept as the back-up and their dependencies on other folders. Or, use curl as mentioned by Darren to ease the things out.
While using package manager you would require to know on how and where the forms are kept in CRX, this will help you ensure that all the necessary paths are specified while creating a package.