Jose Reyes energized the Mets with a leadoff walk, his major league-leading 29th steal and an RBI single. Teammate Carlos Beltran bruised his right knee in a first-inning collision with Giants first baseman Rich Aurilia, and was pulled.
Barry Bonds was steamed -- literally -- on a quiet night in which he went 0-for-3 and stayed at 746 career home runs. The Giants clubhouse was a bit muggy two hours before gametime, and he called for an attendant to turn on the air conditioning.
Hernandez (3-1) had his scoreless-inning streak stopped at a career-high 19 while sending the Giants to their fifth loss in six tries.
Randy Winn led off the game with a single, Omar Vizquel followed with a triple and Aurilia hit a sacrifice fly. That was about all the Giants managed against El Duque -- the only other runner they got against him was a walk to pitcher Matt Cain (2-5).
The victory was nearly a carbon copy of Hernandez's last outing, which came last week at Florida. Activated from the disabled list after a bout of bursitis in his right shoulder, he permitted a leadoff single and then retired the next 17 batters.
Hernandez struck out three and walked one. Featuring his usual assortment of pitches and deliveries, he also provided a little comic relief.
With a runner on first in the third inning, Hernandez fielded Winn's comebacker without realizing it was fouled off his foot. Hernandez instinctively whirled and fired to second -- with no one covering, the ball sailed into center field.
Joe Smith pitched the eighth and Billy Wagner finished the combined two-hitter with his 13th save.
The Mets' trio kept Bonds in the ballpark, though that's not so rare. He has 13 home runs in 419 career at-bats at Shea, by far his lowest rate at any stadium.
Down 2-0, Reyes and the Mets got going in a hurry. He drew a leadoff walk, swiped second and took third on a grounder.
Beltran hit a ground ball that second baseman Kevin Frandsen stopped with a dive to his left. His throw was wide and carried Aurilia across the bag, and Beltran clipped him.
Aurilia tumbled to the ground while Beltran stayed on his feet, and trainers from both teams came on the field. Each player stayed in the game, and Beltran scored from first on David Wright's tying, two-out double. Carlos Gomez replaced Beltran in center field to start the second.
Damion Easley doubled to begin the Mets second, Ben Johnson walked and Hernandez moved them along with a sacrifice. Reyes singled sharply for one run, and Endy Chavez got another home with a two-out bunt single.
Last month, Chavez pulled a similar trick in a bigger spot, with a two-out bunt single in the 12th inning beating Colorado.
Notes: Vizquel hit his first triple of the season. He had a career-high 10 last year. ... The Giants open a four-game series at Philadelphia on Friday night. ... Johnson made his first start for the Mets and later singled. ... Reyes also was caught stealing for the fifth time.