My usual workflow for making changes to the Checker Framework takes this into account by testing anything I expect might fail locally first, then making a pull request to check if there's anything that I overlooked.
For example, if I'm making a change to the Index Checker, I would run `./gradlew IndexTest` before I push anything to a PR to make sure I haven't broken anything. (Depending on what you're doing, the local test(s) you run will be different.) Once I see my changes working locally, I make the PR (and wait an hour, as you noted) to make sure I didn't screw up anything that's unrelated to the change I'm making. Since I already know that my change will work because I tested it locally, I can move on to something else while waiting, and come back to check it later. I (try to) wait to request a review on the PR until after CI passes, to make sure everything is working.
When merging PRs, we always squash-and-merge - meaning that the messy commit history will be removed, and there will be one commit for each pull request (that also encourages us to keep pull requests small!). So don't worry about commit history getting messy!
Martin