I have to believe that there is more to your husband than this behavior or you wouldn’t be describing him as a “great guy.” From what you shared, he sounds like a man who has you walking on eggshells lest you set him off. He is making you responsible for his immature behavior. But the fact is, you don’t have control of his temper. He does. Apologies are worth the paper they’re written on if they don’t lead to change. It makes sense to me that you are feeling disrespected and resentful. After 100 conversations about the same thing, it’s hard to be up for conversation #101.
The only behavior you can change is your own. If you yell back, cry, defend yourself, or challenge him, it will only keep the argument going. Here’s what you can do to try to break the pattern between you:
During one of your talks, explain how much you hate the fights. Explain that you understand that you have a share in it and that you want to change that. Then tell him that when he yells or gets mad, you will just say something like “I understand that you are upset but I can’t hear when someone yells at me. Let’s take a time out until you get back in control.” Tell him you will then stop talking and will wait patiently or go to another part of the house until he calms down.
When you try this, it’s important that you say and do it calmly and kindly. No sighs. No eye-rolling. No angry looks. It’s just a simple statement of fact. As soon as he calms down, let him know you are pleased and see if you can talk through the problem of the moment rationally. If he gets angry again, just repeat your lines.
Hopefully, this system will help you find a more respectful and loving way to deal with stress and disagreements.
I wish you well.