For future readers, I’d like to summarize what I’ve learned from this experience.
I found that, even after I got up and running and reinstalled the fc39 kernel so it appeared in the grub menu, I still had a lot of fc38 packages installed, which were mostly duplicates. So there was more work to do; dnf distr-sync --releasever=39 was the answer, but not before I had to clear one obstacle.
So, here’s the summary:
-
If you get the dreaded “Oh no! Something has gone wrong.” screen, you can try a virtual terminal to fix the problem. however, in my case no virtual terminals were running, so the best thing to do is reboot, go to the grub menu, select the kernel you want and hit ‘e’. Then add a " 3" at the end of the kernel options list, which will put you into run level 3 and bypass any graphical GDM issues.
-
If
dnf distro-sync --releasever=39
does not work due to “Problem: The operation would result in removing the following protected packages: systemd, systemd-udev
(try to add ‘–skip-broken’ to skip uninstallable packages)”, you must usesudo rpm -e --nodeps <package>.fc38.<arch>
on all duplicate packages until distro-sync works. See here for more info. -
Distro-sync will remove any existing duplicates. I was unable to use it, as @glb had originally suggested, due to not forcibly removing the conflicting duplicates in the above step. Had I known I would have been able to recover sooner.
-
If the fc39 kernel is not showing up in your grub menu, reinstall it with dnf.
Hope this helps, and thanks again to everyone who helped.