Swiss police say the co-pilot waited until the pilot went to the toilet before locking himself in the cabin and rerouting the Boeing 767-300ER to Geneva, where it landed at around 06:00 local time.
The co-pilot then climbed down a rope from the window and surrendered to police officers.
Geneva airport was temporarily closed during the incident but reopened for take-offs at 08:00 and for landings at 08:45. The aircraft is expected to be kept at the airport for one or two days while an investigation is carried out.
Ethiopian Airlines says the flight departed Addis Ababa at 00:30 local time and was scheduled to arrive in Rome at 04:40 local time but “was forced to proceed to Geneva airport. Accordingly, the flight has landed safely at Geneva airport. All passengers and crew are safe.”
It adds that it is “making immediate arrangements to fly its esteemed customers on board the flight to their intended destinations”.