A 131-run second-wicket stand between Gill and Kohli stood out after India elected to bat first.
Gill put on 95 runs for the opening wicket with skipper Rohit Sharma, who made 42, to set the tone for the team’s batting domination.
Rohit missed out on a fifty after he fell to Chamika Karunaratne but Gill kept up the attack with Kohli and raised his second ODI hundred, celebrating it with a fist bump.
Gill smashed Jeffrey Vandersay for four fours in the over after the ton, but was soon bowled off a slower delivery from Kasun Rajitha.
Kohli put on another century partnership with Shreyas Iyer, who hit 38, and went on to record the ton with his arms and bat raised to an applauding crowd.
The ball before Kohli got his hundred saw a nasty collision at the square-leg boundary between Vandersay and Ashen Bandara, with both fielders stretchered off.
Dunith Wellalage came in as a concussion substitute for Vandersay and batted for the tourists at number eight.
Kohli changed gears after his 46th ODI century – three behind Sachin Tendulkar’s all-time record of 49 – as he smashed Karunaratne for two successive sixes.
Kohli, who surpassed Sri Lankan great Mahela Jayawardene’s 12,650 ODI runs to enter the top five all-time run getters, reached his 150 in 106 balls and finished off with 13 fours and eight sixes.
Sri Lanka were never in the chase after Mohammed Siraj struck thrice in his first five overs including the wickets of Avishka Fernando, for one, and Kusal Mendis, bowled on four.
The tourists kept losing wickets to Siraj’s pace and swing and the quick also ran out Karunaratne with a direct throw that caught the batsman off guard and out of his crease at the striker’s end.
Mohammed Shami and Kuldeep Yadav picked two wickets each to flatten Sri Lanka’s batting with 28 overs to spare, with the tourists losing nine wickets and injured Bandara not batting.