Правильно: в Москве; в г. Москве, в городе Москве (последние два варианта следует характеризовать как специфически-канцелярские, т. е. употребительные преимущественно в официально-деловой речи). Варианты в г. Москва, в городе Москва не соответствуют литературной норме.
Правило таково: географическое название, употребленное с родовыми наименованиями город, село, деревня, хутор, река, выступающее в функции приложения, согласуется с определяемым словом, то есть склоняется, если топоним русского, славянского происхождения или представляет собой давно заимствованное и освоенное наименование. Правильно: в городе Москве, в г. Санкт-Петербурге, в городе Владивостоке.
Обычай не склонять географические названия укоренился в профессиональной речи военных и топографов и под влиянием этого профессионально-терминологического языка широко распространился в современной речи, однако нормой его считать нельзя.
Подробно о склонении географических названий и об употреблении перед названиями городов сокращения г. и слова город см. в «Письмовнике».