First baseman Brandon Belt has reached agreement on a $2.9 million, one-year contract with the San Francisco Giants to avoid salary arbitration.