It is still in England’s hands to reach the semi-finals of this enthralling World Cup. In a captivating game at Edgbaston, which was transformed into a wondrous Colosseum of cricket on a sunny Sunday afternoon, England won by 31 runs in a match decorated by high drama, sumptuous centuries from Jonny Bairstow and Rohit Sharma and a gutsy England performance after a tricky week under the spotlight.

This victory was crucial to England’s World Cup hopes. It meant that if Eoin Morgan’s side can defeat New Zealand in Chester-le-Street on Wednesday they are guaranteed a place in the semi-finals. They will need every second of the next two days to recover from a sapping contest, in which they held their nerve superbly against the only unbeaten side left in the tournament – until 6.30pm on Sunday night.

Aggrieved Jonny Bairstow takes out frustrations in cause of England win | Ali Martin Read more

Theirs was not a flawless performance – life might have been less stressful for England and their supporters if Joe Root had held on to a routine slip catch when Sharma was on four – but it was a characterful one in the field after a fearless opening partnership had set England on their way earlier in the day.

The scorecard highlights the key runscorers easily enough with Bairstow, Jason Roy and Ben Stokes all delivering high-quality innings. Less obviously there were grand performances in the field: from Chris Woakes, who began with three maidens and a wicket as well as pulling off another brilliant boundary catch; from Jofra Archer, who kept his cool again; and from Liam Plunkett, preferred to Moeen Ali, a shrewd decision given the punishment to the Indian spinners earlier in the day.

Facebook Twitter Pinterest Virat Kohli walks off after getting out. Photograph: Matt West/BPI/REX/Shutterstock

Plunkett somehow conjured vital wickets from the first ball of two of his spells; crucially he dismissed Virat Kohli when England were under threat; later he returned to dispatch Rishabh Pant and Hardik Pandya when the chase was on.

Those wickets terminated India’s chance of a record run chase – they needed the small matter of 338 to win the game. Thereafter MS Dhoni seemed to decide the target was out of range. So England could at last heave a sigh of relief and look forward to Wednesday in a more tranquil frame of mind. They delivered under pressure in a manner that any old player would have to applaud. The likelihood is that the pressure will be just as intense against New Zealand up in Durham – and just as spellbinding for those able to watch. It is hard to see how Morgan can now do without Plunkett.

There were moments during England’s innings when it seemed that the target would be completely out of range so well did Bairstow and Roy launch the innings after Morgan had chosen to bat at the toss. Roy resumed his England career batting in the same vein as in his last innings – against Bangladesh at Cardiff – with two crisp boundaries off Mohammed Shami.

The openers negotiated the first 10 overs decorously enough, scoring 47 runs, several of which came off the inside edge of Bairstow’s bat. Then in the 11th over Roy had a great slice of luck. He swatted at an innocuous delivery from Pandya. There was an appeal for a catch behind rejected by umpire Aleem Dar, who promptly signalled a leg side wide. Pandya remained keen on a review; Dhoni rejected this idea and Kohli followed his wicketkeeper’s advice. It transpired that the ball had brushed Roy’s gloves.

Play Video 1:41 Eoin Morgan hails 'match-winning' Jonny Bairstow after England beat India – video

This escape seemed to galvanise the batsmen. Roy smote the next two deliveries for six and four; at the other end Bairstow changed gear, launching the wrist-spinners into a crowd predominantly clad in the blue shirts of India. Together they raced along, demystifying the Indian spinners in the process – Kuldeep Yadav and Yuzvendra Chahal would yield 160 runs from their 20 overs.

Roy was the solitary victim of a spinner when Ravi Jadeja, a ubiquitous substitute fielder, dived to his left at long on to complete a superb catch. But his 66 had set the tone wonderfully. Root now kept Bairstow company as he sped to his century, for which a couple of old England players might claim the credit – “he just needs a bit of prodding to get his hackles up and away he goes”. A marvellous innings of 111 ended when Bairstow carved Shami to deep cover – a terrible shot (don’t fret, I’m only winding him up for Wednesday).

For a while the innings stalled – overs 28-37 produced just 25 runs. Morgan never ignited and was caught from the top edge hooking again, which will not have escaped the Kiwis. Meanwhile, Root was concerned not to blow the brilliant start to the innings. It was left to Stokes to regain the momentum with another timely knock of 79 and a bit of help from Jos Buttler (20 from eight balls). At the end Shami picked up wickets but once again it was Jasprit Bumrah who tormented the batsmen mostly with brilliant yorkers.

England beat India by 31 runs: Cricket World Cup 2019 – live! Read more

India’s response began slowly thanks to Woakes, but Sharma, who had been dropped on four, eventually found his touch alongside an animated Kohli. Then he produced a stream of silky drives from the middle of the sweet spot of an increasingly broad bat. They accelerated ominously but England squeezed effectively after the departure of Kohli. Pandya hit some thunderous blows but once he had been caught on the boundary the idiosyncratic Dhoni seemed to decide that he should protect India’s net run rate, a source of relief to the England fielders and bewilderment to those looking on in the stands.