周襄王二十二年(前630年),烛之武说退秦师后,秦、郑结盟,杞子、逢孙、杨孙等大夫带二千人马被派住郑国戍守。二年后,杞子从郑国派人向秦穆公报告说:他已经掌管了郑国都城北门的钥匙,如果秘密发兵前来,里应外合,郑国肯定会到手。秦穆公召集大臣商量出兵之事,年迈的蹇叔和百里奚都不赞同,认为军队劳苦跋涉去袭击远方的国家,将卒辛劳、精疲力尽,郑国又有防备。再说千里行军,谁人不知?劳苦而无所得,将士也不会满意。秦穆公不听蹇叔的劝告,召见百里奚的儿子孟明视和蹇叔的儿子西乞术、白乙丙三人为大将,率领大军从国都东门处出发。蹇叔哭着对孟明视说,我只能看见军队开出去,却看不到他们回来了!秦穆公派人对他说:你知道什么?如果你六七十岁死了,你坟上的树现在也该有两手合抱那么粗了?蹇叔的儿子参加了出征的队伍,蹇叔哭着送他说:“晋国必定在殽山(今河南济宁西北)一带阻击秦军。殽山有两座大的山陵,南面的山陵,是夏后皋的坟墓;北面的山陵,是周文王避过风雨的地方。你们必将死于两座山陵之间,我在那里为你们收尸吧!”
秦军向东进发。周襄王二十五年(前627年)春天,秦军经过周王都洛邑的北门,兵车的左右卫脱去头盔,下车步行,以表示对周王的敬意,但是随即就跳上车,战车有300多辆。周共王的玄孙王孙满年纪还小,看到秦军的这种举动,认为秦国的军队轻佻而无礼,必然打败仗。
秦军到达滑国(今河南巩县西北),遇上了准备到周王都贩牛的郑国商人弦高。弦高见秦军突然而来,郑国毫无准备,急中生计,自称是郑国派来的使臣,先致送四张熟牛皮,然后又奉送12头牛犒劳秦军,假称受国君的委托来犒赏秦军,对秦穆公说:敝国并不富厚,为了您的随从能够在这里生活方便,住下就提供一天的食物,离开就准备一夜的守卫。同时,派人火速向郑国报告。
郑穆公得到消息后,派人去馆舍探视杞子等人的动静,发现他们已经装束完毕,磨利兵器、喂饱战马了,于是派皇武子下令逐客。杞子逃跑到齐国,逢孙、杨孙二人逃到宋国。秦军得到报告,主将孟明视认为郑国已有准备,没有得到郑国的希望了。攻郑不能取胜,围郑又无后续,建议早日回军。因此,秦军回师,顺路灭掉滑国。
就在这时,晋文公刚刚去世,晋国大臣认为秦国此举严重威胁晋国的霸业。晋国大夫先轸认为机不可失,放走秦军要生后患,一定要阻止秦军。栾枝则认为,先君复国,靠得是秦国的支持,未及报恩就攻打人家,对不起死去的先君。先轸反驳说:秦国不因我们的丧事而悲伤,反而攻打我们的同姓国,这是秦国无礼。一旦放走敌人,几辈子要受祸患,我们为晋国子孙后代着想,这可以对去世的国君说!于是就发布命令,紧急动员姜戎的军队,晋襄公染黑丧服,领兵出征,梁弘驾御车,莱驹做保镖。
同年夏四月,晋军在殽山击败秦军,俘虏了孟明视,西乞术、白乙丙,胜利而回,然后身着黑色的丧服安葬了晋文公。晋文公的夫人(秦穆公的女儿、晋襄公的母亲)文嬴请求释放秦国的三位将帅,说是他们三人挑拨晋、秦两国国君的关系,如果父王(秦穆公)得到这三人,就是吃了他们的肉也不满足,何必屈尊晋君去惩罚他们!莫如让三人归秦接受刑戮,也使父王快意。于是,晋襄公就答应了她的请求。
先轸入朝进见晋襄公,问起秦国的囚犯。襄公说:“母亲代他们求请,我把他们放了。”先轸大怒,认为将士们拼力把他们从战场擒获,一个妇人说几句谎话就把他们从国都释放,毁伤自己的战果、助长敌人的气焰,亡国没几天了!说着说着对着晋君就往地下吐唾沫。晋襄公十分后悔,立即派阳处父去追赶孟明视等人,追到黄河岸边,孟明视等已经上船离岸了。阳处父解下车左的骖马,说是晋襄公要赠送他们,请他们上岸。孟明视等在船上叩头辞谢道:蒙晋君的恩惠,不用我等的血涂军鼓,使我们回归秦国接受刑戮。秦君如杀了我等,死而不朽;如托晋君的恩惠得到赦免,三年之后,必将拜谢晋君的恩赐。这实际上是说三年之后必来报仇。
秦穆公衣着素服,在效外对着释放归国的将士号哭,说:“我不听蹇叔的忠告,致使你们几位蒙遭耻辱,这是我的罪过!”继续任用孟明视等人。
殽之战以及其后的秦晋彭衙之战,使秦国向东扩张的战略连连受挫,无法东进。于是,秦穆公就把战略重点转向西,展开了称霸西戎的大业。