Defending Olympic champions Germany twice came from behind to beat world number ones and red-hot favourites Australia and book their place in the final.
It is a fifth gold medal match for the Europeans, although two were as West Germany, who have won twice before.
In an surprisingly open match Australia had the better of the first half but were stunned by a fightback after the interval.
It sets up the prospect of a repeat of the 1988 Seoul final if Great Britain can overcome Holland in the evening match.
The first half was played at searing pace, matching the temperature down on the pitch in the baking afternoon sun, with both sides intent on attacking.
Australia created more of the chances but in terms of conversions it was honours-even at the break.
Mark Knowles flashed a reverse-stick effort across goal and wide before Germany, one of only two teams to have beaten the Kookaburras at a major tournament in the past three years, had a penalty corner downgraded to a free-hit as Christopher Zeller was adjudged by the video umpire to have been fouled outside the circle.
When they did win their first corner Zeller flicked straight at goalkeeper Nathan Burgers but two minutes later the Kookaburras went ahead.
A quick break down the left allowed Glenn Turner to cut in and shoot but Max Weinhold could only parry the ball into the air and when it dropped Kieran Govers smashed it in on the first bounce.
Within five minutes Germany were level through Moritz Fuerste's low penalty corner which the unsighted Burgers could not keep out.
Oliver Korn rattled a shot just wide early in the second half but Australia were much sharper in front of goal and when both Jamie Dwyer and Eddie Ockenden had shots saved by Weinhold, Turner converted from close range.
The game became niggly, which suited the Kookaburras with their lead, and Germany's frustrations increased when what would have been goal of the tournament for Oskar Deeke was chalked off.
Korn's aerial ball from almost the halfway line was controlled superbly by his team-mate, keeping it up in the air twice before hooking over Burgers only for the video umpire to rule his stick was too high.
But while Zeller was in the sin-bin Germany equalised with a helping hand from their opponents.
Possession was given away to Tobias Hauke in the inside-left channel and his inch-perfect pass picked out the unmarked Matthias Witthaus to score with an early shot.
Better was to follow as Timo Wess converted a penalty corner and, as Australia pushed for an equaliser, a sliding Florian Fuchs converted Benjamin Wess' cross on the counter-attack to stun Australia.
Germany coach Markus Weise has made a third successive Olympic final having won gold with the women's team in 2004 and again with the men four years ago.
"It was a super semi-final for us," he said.
"The tough thing about a semi-final is that one of two top teams has to go - this time we had the better end.
"I am really pleased with the performance, it was a super-passionate game full of fighting spirit and just what you need in a semi-final and on top of that we played some hockey.
"Both teams did not have many chances, which is quite an achievement against Australia because usually you have to defend against 20 different chances.
"It was a super game for us."
Australia coach Ric Charlesworth agreed it had been a tightly-contested match but felt a mistake by his side with the score at 2-1 let Germany back into the match and they grew in strength from that point.
"It is 50/50 every time we play Germany and they got the better of us at the end today," he said.
"It is very disappointing for the players and all of us but we play sport and each time you play there is a winner and a loser and we came up short today.
"Each team had a similar number of chances. It comes down to small margins.
"I think the goal (when Matthias Witthaus scored the second equaliser) which brought Germany into the game was a soft turnover in midfield.
"If you make errors against a good team like Germany you are going to get hurt."