Three-time champion Lance Armstrong finished in 40th place with the main pack, nearly 4 minutes off Halgand's pace. He remained 26 seconds behind Gonzalez Galdeano in the overall standings.
Halgand, who rides for the Jean Delatour team, surged in the final climb of the relatively flat 147-kilometer (91.14-mile) leg from Bazas to Pau in southwestern France.
He attacked in the final 6 kilometers (3.7 miles), and beat countryman Jerome Pineau, of the Bonjour squad, by 27 seconds.
Halgand set a blistering pace of 3 hours and 15 seconds to claim his first-ever stage win in the Tour. The main pack, which included Gonzalez Galdeano, was 3:57 behind.
Gonzalez Galdeano has held the yellow jersey worn by the race leader for the last six stages, and will wear it in Thursday's opening mountain stage, from Pau to La Mongie, high in the Pyrenees.
The 158-kilometer (97.96-mile) stretch features two very difficult climbs, and should see Armstrong make his first serious bid for the race lead.
Stage 10: Post-stage commentary
Stage 10: Live update summary
Stage 10 results, top 15 (Bazas - Pau, 147 km)
1. Patrice Halgand, France, Jean Delatour, 3 hours, 0 minutes and 15 seconds.
2. Jerome Pineau, France, Bonjour, 27 seconds behind.
3. Stuart O'Grady, Australia, Credit Agricole, 33 seconds.
4. Ludo Dierckxsens, Belgium, Lampre, 33 seconds.
5. Pedro Horrillo, Spain, Mapei, 1:00.
6. Andy Flickinger, France, AG2R, 1:00.
7. Nicolas Vogondy, France, fdjeux.com, 1:00.
8. Nico Mattan, Belgium, Cofidis, 1:00.
9. Constantino Zaballa, Spain, Kelme, 1:00.
10. Enrico Cassani, Italy, Domo Farm Frites, 1:02.
11. Unai Etxebarria, Venezuela, Euskaltel, 3:29.
12. Baden Cooke, Australia, fdjeux.com, 3:57.
13. Robbie McEwen, Australia, Lotto, 3:57.
14. Erik Zabel, Germany, Telekom, 3:57.
15. Jan Svorada, Czech Republic, Lampre, 3:57.
40. Lance Armstrong, United States, U.S. Postal Service, 3:57.
42. Igor Gonzalez Galdeano, Spain, Once, 3:57.
70. Santiago Botero, Colombia, Kelme, 3:57.
73. Joseba Beloki, Spain, Once, 3:57.
Overall standings, top 101. Gonzalez Galdeano, 36:25:35.
2. Armstrong, 26 seconds behind.
3. Beloki, 1:23.
4. Serhiy Honchar, Ukraine, Fassa Bortolo, 1:35.
5. Botero, 1:55.
6. Andrea Peron, Italy, CSC-Tiscali, 2:08.
7. David Millar, Britain, Cofidis, 2:11.
8. O'Grady, 2:15.
9. Raimondas Rumsas, Lithuania, Lampre, 2:22.
10. Tyler Hamilton, United States, CSC-Tiscali, 2:30.