The 31-year-old co-pilot, of Ethiopian origin, took control of the plane after locking himself into the cockpit when the pilot went to the toilet, police said.
He flew the plane to Geneva, where he planned to seek asylum because he felt threatened in his home country, Geneva cantonal police spokesman Eric Grandjean told a press conference at the airport.
The Boeing 767 plane landed at 6.02am after the co-pilot sought permission at 4am to land at the Geneva airport for refuelling, he said.
The hijacker contacted Geneva Airport and said "he had a problem with his plane and needed to land to fill the tank with kerosene . . . and that he had
technical problems with the engine," Grandjean said.
The co-pilot then said he had hijacked the plane, Grandjean said, adding that Geneva airport had allowed him to land "for safety reasons".
The plane was escorted there by two Eurofighter jets from the Italian air force after the plane was diverted from airspace over Italy, he said.
After the passenger plane touched down the pilot opened the cockpit window and let himself out with a rope, police said.
He was arrested without resistance by officers who surrounded the plane, along with elite soldiers, the Tribune de Genève newspaper reported.
The hijacker was unarmed and the plane's passengers were never in danger, Grandjean said.
Olivier Jornot, chief prosecutor for the canton of Geneva, told the press conference that the alleged hijacker faces a penalty of up to 20 years in prison.
Hijacking, involving the taking of hostages, is regarded as one of the most serious crimes in Switzerland, he said.
The man is set to go before a judge on Monday, Jornot said.
It was the first time since 1987 that a hijacked plane has been forced to land in Geneva, according to police, and the first time in Swiss history that a co-pilot had hijacked an aircraft.
Management closed down the airport at around 7am and reopened the facility around 75 minutes later, the Tribune de Genève reported, although many flights were delayed by more than two hours.
— Alejandro Palma (@Alej_Pal) February 17, 2014