In addition, I think bash's `operate-and-get-next` can be very helpful. When you go back through your shell history, you can hit Ctrl+o instead of enter and it will execute the command then put the next one in your history on the command line, and keep track of where you are in your history. This way, you can rerun a bunch of commands by going to the first one and Ctrl+o till you are done. And you can edit those commands and hit Ctrl+o and still go to the next previously run command.
Note: fzf's history search feature breaks this. https://github.com/junegunn/fzf/issues/2399
Edit: And up and down will still keep the relative position you are at in your history in case you want to skip a command.