The Cardiff-born rider was part of a select group of riders who went clear over the top of the final Ospedaletto climb on the 194km stage from Terni to Casca.
Thomas eventually finished fifth and is now sixth overall – 34 seconds down on Canada’s Michael Woods who retained the lead in a race which ends on Monday.
The 34-year-old is using the race as a building block for next month’s Giro d’Italia and reckons his fitness and form is returning.
“It’s a lot better than I was three weeks ago, I think this race will do me a world of good, move me on that little bit more and be ready for the Giro,” said Thomas.
Thomas had started the day without support rider Eddie Dunbar who was forced to pull-out after fracturing his shoulder in a crash on stage three.
But his INEOS Grenadiers team took up the pace on the final climb through Rohan Dennis and Tao Geoghegan Hart before the attacks started with Thomas following.
Lucas Hamilton (Mitchelton-Scott) pushed clear to outsprint Fausto Masnada (Deceuninck-Quick-Step) on the uphill run-in with Thomas crossing the line 10 secs further back.
The race ends on Monday.
“The boys were good all day. It was a shame we lost Eddie (Dunbar) but everyone was able to step up as we needed to make up for him not being here.
Then on the final climb I could have maybe stayed behind Tao for a bit – but I just went. This race is all about seeing how the legs are really and riding slightly differently. I didn’t really give them a turn on that climb because I thought Tao was in that group behind and there was no point drilling it.
“In the final it’s a tricky one when there’s teammates. I don’t want to follow every move because there are teammates to chase. I’m just riding this race as if I’m prepared to lose it. I came to a sprint for third. I knew the road tightened up on the right and I was hoping I could use that to hold them off. I think I went a little too early but it’s all good.”
Tirreno-Adriatico 2020, stage four: Terni to Cascia (194km)
1. Lucas Hamilton (Aus) Mitchelton-Scott, in 4-46-22
2. Fausto Masnada (Ita) Deceuninck – Quick-Step, at same time
3. Michael Woods (Can) EF Pro Cycling, at 10s
4. Aleksandr Vlasov (Rus) Astana
5. Geraint Thomas (GBr) Ineos Grenadiers
6. Wilco Kelderman (Ned) Team Sunweb
7. Jack Haig (Aus) Mitchelton-Scott
8. Rafał Majka (Pol) Bora-Hansgrohe
9. James Knox (GBr) Deceuninck – Quick-Step
10. Simon Yates (GBr) Mitchelton-Scott, all at same time
General classification after stage four
1. Michael Woods (Can) EF Pro Cycling, in 18-05-52
2. Rafał Majka (Pol) Bora-Hansgrohe, at 9s
3. Fausto Masnada (Ita) Deceuninck – Quick-Step, at 18s
4. Lucas Hamilton (Aus) Mitchelton-Scott, at 27s
5. Wilco Kelderman (Ned) Team Sunweb, at 30s
6. Geraint Thomas (GBr) Ineos Grenadiers, at 34s
7. Simon Yates (GBr) Mitchelton-Scott
8. Aleksandr Vlasov (Rus) Astana, at same time
9. Jack Haig (Aus) Mitchelton-Scott, at 47s
10. James Knox (GBr) Deceuninck – Quick-Step, all at same time