An open source software is developed in a publicly-accessible source code repository. Starting from the first commit, the source code is licensed under the GPLv3. There is only one copyright holder. On the 10th commit, an official release of version 1 of the software occurs. Two commits later, on the 12th commit, the copyright holder changes the license from GPLv3 to the BSD 3-Clause license, and continues to develop the software. The repository is now at its 20th commit. The question: when the code was relicensed, was all the old code (commits 1 to 11) relicensed as well? If not, how should the copyright holder relicense the old commits without altering the version control history of the repository?
There seem to me to be two questions here. Firstly, the issue of relicensing, and secondly, the issue of version control systems.
The first question is hard to answer, because it presumes that licences inhere in code. They do not; instead, their rights and obligations attach to recipients of the code through the act of conveyance. Once you think that way, the problem goes away.
Assuming you have the right to relicense the code, then you can change, right now, the licence declarations in the current (and also, if you wish, in the old) versions. Anyone who gets a version from you will get it on the terms stated in that version at the time that they get it.
Persons who already have copies of old versions have them under the terms that they were advised of at the time they took them. You cannot revoke those terms retrospectively. If those terms, as free licences do, permit the licensees to further redistribute the code, then if they choose to do that it will be done on the terms of their choice, subject to the constraints imposed by the licence at the time of the original conveyance.
The second question is specific to your VCS, and we can't advise on that here.