[Sorry for flooding this thread as well… Another existing explanation is that it wasn't g>h, but s>h>∅>w>v. The inherited ending of the genitive singular in this type of pronominal declension was -so, attested in česo. The ending -go is the most etymologically obscure in all the Slavic grammar, and it was suggested to have arisen as a result of an idiosyncratic change s>*h (perhaps somehow related to the disappearance of the final s in earlier Common Slavic, which may have passed via the stage h, that is *-s>*-h>-∅). H did exist in late Common Slavic, it was a marginal consonant found for example in the pronouns in he- (Belarusian гэты, Russian этот, with the absence of iotation due to the former presence of h-). This marginal -h- of the genitive ending would merge with g>ǥ>h in the stripe from Czech to southern Russian, with g in South Slavic, Polish and perhaps partly in Russian, and disappear while leaving a hiatus filled with w>v in northern and central Russian and Kashubian.]It's theoretized that it comes through some early interaction between g-dialects and ɦ-dialects somewhere in the northern part of Old Russian area, with -ɦo as an intermediate stage (and if I am not mistaken, it's directly attested in North Russian dialects). Ultimately -vo became the marker of North and Central Russian dialects, but since Russian orthography was essentially based on Church Slavonic (obviously unaffected by that change), that "г" letter in genitive inflections had to stay. At any rate, that purely morphological irregularity is quite easy to memorize (with "e" it's much worse).
Last edited: