在攻占五鹿城的戰鬥中,充分顯示出先軫的用兵才能。時隔不久,中軍元帥位置空缺,晉文公提拔先軫為中軍元帥。晉三軍齊進,很快攻占曹、衛兩國,活捉了曹共公。然而,楚軍並未因曹、衛滅亡而移師攻晉,而是仍然強攻宋國。宋國再次求救。文公問計於先軫。先軫建議,讓宋國備好財物去賄賂齊、秦二國,讓二國出麵調停。
在宋國難以攻下、晉軍又大兵壓境的形勢下,楚中軍主帥子玉同意與晉談判。楚人要求晉人恢複曹、衛兩國,然後,晉楚各自撤軍。先軫提出激敵之策,私下向曹、衛兩國許願恢複其國,但他們必須對外宣布,脫離楚國。同時,晉軍扣留了楚軍前來談判的使者。楚軍主帥子玉終於被激怒了,撤去宋圍,直逼晉軍,準備決一死戰。
晉文公見楚軍大舉進攻,兩國交戰勢在難免,但他深念流亡楚國時楚成王的厚待之恩。成王曾問他,如果他回國執政,將用什麼報答成王?重耳回答,兩國交兵,“退避三舍”。晉文公不忘舊日許諾,命令撤軍九十裏。一直退到衛國的城濮才紮下營寨,等待楚軍來攻。
公元前632年4月3日,齊秦宋三國助戰的軍隊與晉軍會合於城濮,楚國大軍也已進入城濮。晉文公命中軍元帥先軫點兵車七百乘、精兵五萬,準備迎敵。4月4日,兩軍約期交戰。先軫命令下軍的一部分進攻楚軍較弱的下軍。晉軍下軍駕車的馬統統蒙上虎皮,向前橫衝直撞,楚右軍駕車的馬視對方如虎,被嚇得邁不動腳步,全部伏臥於地,戰馬十動,戰車失靈,兵士驚慌不知所措。晉軍下軍徑直衝入楚右軍陣地,橫加射殺,楚右軍士兵未死者紛紛棄陣逃跑。楚右軍全部崩潰。
晉國上軍假豎中軍旗幟,虛假進攻之後,裝作敗退。敗退途中,在馬車後拖著樹枝,高揚塵土,虛張聲勢。楚左軍不知是計,放膽追殺,把側翼暴露給晉軍。先軫見反擊時機已到,便指揮中軍攔腰斬斷楚軍,狐毛、狐偃率領的上軍也衝殺過來,下軍在擊敗楚右軍之後,回頭包圍了楚上軍。楚軍主將子西率領的部隊被晉軍團團圍住。主帥子玉奮力解救,才保住楚軍主力的突圍。楚軍大敗而去。
晉楚一戰,不僅解了宋之圍,迫使曹、衛重新歸向晉國,還在城濮之戰中大敗強盛的楚軍,繳獲敵人兵車一百乘,俘虜楚軍步兵一千人。
秦晉交兵,使秦穆公的女兒、晉襄公的母後文贏大為震驚。當她聽說晉軍大敗秦軍的時候,悲傷欲絕。晉襄公班師,押著三名被俘的秦國大將回來。文贏向晉襄公求情,讓他放了秦國的三位將軍。晉襄公軟弱,在文贏以死相威脅之下,釋放了秦國的大將孟明視、西乞術和白乙丙。先軫知道此事,麵見晉公,罵他是縱虎歸山,氣急之下竟唾襄公之麵。襄公知道自己錯了,命令軍隊立即追趕秦將,但為時已晚。
先軫怒唾了君主的麵子,深知有罪,他請求晉襄公處罰他,但晉襄公原諒了他。先軫深感不安。
公元前627年,北方的狄國向其國邊界發起進攻。先軫主動提出辭去元帥之職,願上戰場以死效君贖罪。他說,無禮之人,不足為帥,請君另擇良帥。襄公不準,仍命他為帥,北伐狄人。
先軫見推辭不掉元帥之職,隻得從命。他選兵點將,調集兵車四百乘,命兒子先且居為先鋒,發兵出降都北門,向箕城進發。兵到箕城,狄族已經打到這裏。先軫了解箕城地形,知此地有山穀,穀中寬闊便於車戰,同時,兩側丘地多生樹木,便於設伏兵。於是,他將步兵埋伏於道路兩側,命先且居率軍與敵交戰。交戰幾個會合後,先且居佯裝敗退,把狄兵引入山穀之中,埋伏的晉軍突然衝殺出來。狄族主力被包圍,經過激戰,晉軍消滅了狄軍主力,殺死了狄兵首領,割下其首級準備向晉襄公報喜。狄兵隻剩下少許殘餘的勢力。
在晉軍即將大獲全勝之時,先軫卻單車衝入狄兵殘餘勢力之中,然後,解開甲胄,讓敵人的利箭直射其身,最終飲箭身亡。將士們都明白,他是自責其唾君之罪,假狄人之手以代君懲罰。
先軫一生,光明磊落,作人有大丈夫之氣魄;為將,有千軍難擋之勇;任帥,有出敵不意之策。作為一代名將,其統兵和作人,都堪稱晉國的傑出人才。