It was incredible that a first half full of chances at both ends, if short on quality, did not provide any goals.
But it was the Robins who finally made the breakthrough after the break, with Liam Sercombe’s strike enough to separate the teams.
Danny Cowley made five changes from the side that were held to a draw at Bolton earlier in the week.
Shaun Williams – fully recovered from a back injury – was handed his first start for more than three months.
And there were also places in the line-up for Mahlon Romeo, Ryan Tunnicliffe, Ronan Curtis and Tyler Walker.
Clark Robertson, Louis Thompson, Joe Morrell, Michael Jacobs and George Hirst all dropped to the bench.
The opening 45 minutes were an action packed, end-to-end affair, with both sides having multiple chances to break the deadlock – helped by some sloppy defending.
A quick break provided the visitors’ first opportunity after just six minutes, as a fine Williams pass sent Marcus Harness racing clear.
He laid the ball off for Romeo and a slip from Reece Hutchinson appeared to give him a free sight on goal, only for a fine recovery challenge from the prostrate wing-back.
Walker soon sent a delivery into the area and Aiden O’Brien get a slight touch on his volleyed effort to send the ball narrowly past the post.
Matty Blair tried to curl home an effort at the other end of the pitch and the ball took a big deflection off Connor Ogilvie before flying into the side netting.
The resulting Alfie May corner led to a spot of pinball in the Box box, with Mattie Pollock eventually poking wide.
Pompey were soon back on the attack themselves and a low Romeo centre was met by O’Brien’s neat back-heel.
Walker tried to turn the ball home from a few yards out, but Owen Evans made the save and kept out the follow up from O’Brien.
A defensive mix-up almost provided an opener midway through the first half and Curtis was able to steal possession from Sean Long.
He then found O’Brien inside the area, only for Robins skipper Will Boyle to get back just in time and make a key challenge which the Blues were adamant was a foul.
But then it was the visitors’ turn to look shaky at the back and they lost the ball right on the edge of their own box.
Gavin Bazunu came to the rescue by making saves to deny Callum Wright and May in quick succession, while Blair’s third attempt was cleared from the line by Hayden Carter.
The action continued to switch from end to the other and Sean Raggett could not quite connect with a fine Williams delivery from the left.
It was Cheltenham who threatened just before the interval, though, and Kion Etete should have done better when he nodded over a Wright cross.
Cheltenham Town 0
The contest continued to be played at a frenetic pace once the action restarted, although a Curtis shot did not overly trouble Evans.
Cheltenham then enjoyed a quick break up the pitch, which led to a Blair effort that was blocked by Tunnicliffe.
Cowley made a double switch on the hour mark, with Harness and Williams replaced by Jacobs and former Robins loanee Morrell.
And the final substitution followed not too long after, as Hirst added some fresh attacking energy in place of O’Brien.
There was immediately a great chance for Pompey when Morrell lifted a pass into the box and it was flapped at by Evans.
The follow-up shot from Jacobs appeared to be heading into the net, but Pollock flung himself in its path to divert the ball over.
But it was soon Cheltenham’s chance to go close and a 30-yard Wright rocket was superbly turned around the post by a diving Bazunu.
What followed was the home side’s most sustained spell of pressure in the game and they made it count on 76 minutes.
Etete combined well with Wright on the left and the latter squared the ball for Sercombe to fire home.
And although Pompey huffed and puffed right up until the final whistle, their opponents remained resolute to claim victory in this fixture for the first time.
Cheltenham (3-5-2): Evans; Long, Pollock, Boyle (c); Blair, Sercombe (Chapman 90), Bonds, Wright, Hutchinson; Etete (Lloyd 82), May
Goals: Sercombe 76
Subs not used: Flinders, Raglan, Freestone, Ramsey, Brown
Pompey (4-2-2-2): Bazunu; Romeo, Carter, Raggett (c), Ogilvie; Tunnicliffe, Williams (Morrell 60); Harness (Jacobs 60), Curtis; Walker, O’Brien (Hirst 69)
Subs not used: Webber, Robertson, Thompson, Mingi
Referee: Ollie Yates
Attendance: 5,117 (1,425 Pompey fans)