Why is "sergeant" pronounced "sargent"?

Solution 1:

Per the Naval Historical Center:

The English borrowed the word "sergeant" from the French in about the Thirteenth Century. They spelled it several different ways and pronounced it both as SARgent and SERgeant. The latter was closer to the French pronunciation. The SARgeant pronunciation became the most popular, however, so that when the Nineteenth Century dictionary writers agreed that the word should be spelled "sergeant" they could not change the popular pronunciation. Thus, we say SARgeant while the French and others say SERgeant.

Solution 2:

The digraph <er> represented /ɜːr/, which became opener /ɑː(r)/. As the sound shifted, so the spelling shifted to <ar> in many words. Folks have kept the old spelling especially in the case of their names and place names, so we have a mismatch between the spelling and the expected sound. In other cases, we have two spelling versions: derby vs darby, clerk vs clarke, Hervey vs Harvey, merchant vs marchant, farmer vs fermor; etc. Most of this is from Jack Windsor Lewis's Derby and Similar Words. This mismatch (sergeant vs sar-) is not unique to sergeant. You can find more examples in that post from JWL. Check his Grapho-Phonemic mis-cordinations.