How do devs decide who should have commit access? what is the process? Andrew Chow (2020) compiled a great list on when people gained/lost commit access to Bitcoin Core.
Satoshi asked Andresen to take over as Lead Maintainer, and Andresen passed the responsibility to Van Der Laan. The Lead Maintainer appears to be selected by the previous Lead Maintainer (by convention).

Many others have received/lost commit access. How exactly is
this decision made? and by who?

If the Lead Maintainer unexpectedly died (hope not), but if he
did, who would decide upon the next Lead Maintainer and how?
Many others have received/lost commit access. How exactly is this decision made? and by who?

Nowadays the decision is generally made by the developers during one of the weekly IRC meetings. This is not done by committee nor a specific group, just whoever is attending the meeting when the topic is brought up. It's usually the same people at every meeting.
Typically how adding a maintainer works is that someone brings up a topic for adding a maintainer, others nominate a person to be that, and then the group votes. Since in the past there have really only been one person nominated at a time, it's been a yes/no vote rather than a vote for a candidate. The process is largely informal as the people nominated are typically well known developers and have been around for a while.
For revoking access, the process works pretty much in reverse. Someone brings up a topic to remove access for particular users, typically because they are inactive, and the group votes on whether to do so. There have been a few exceptions to this - Gavin Andresen's commit access was revoked after concerns that his accounts had been compromised. Since he was also inactive, it was decided to leave his commit access revoked.
Developers may also choose to no longer have commit access in which case their commit access is revoked upon asking.

If the Lead Maintainer unexpectedly died (hope not), but if he did, who would decide upon the next Lead Maintainer and how?

It would pretty much be the same process as adding a new maintainer. This is also likely the same process if the lead maintainer decided to step down. Someone would volunteer or be nominated, likely one of the current maintainers, and then that person is voted on by the group at a meeting.

In general, there is a formal process for adding or removing commit access. It's generally done by the group of developers attending an IRC meeting with those developers essentially voting yes/no.