晉文公執政後, 整理朝綱, 發展生產, 使晉國日益強大起來, 他的目標是像齊桓公那樣, 稱霸中原。
這時, 周天子派人求救, 周襄王有個同父異母的弟弟, 叫太叔帶, 聯合大臣, 朝狄國借兵, 爭奪王位, 周天子帶了些僕人, 逃亡鄭國, 請求諸國護送他到洛邑, 有人給周天子送食物, 也有人送衣服, 但是就是沒有人願意出兵幫助周襄王的。
周襄王的僕人對他說, 現在可以幫助您的只有秦晉兩國, 其他人怕是沒有這個能力, 於是周襄王就派人去請晉文公護送他去洛邑。
晉文公聽後就立即發兵打到東部, 又將太叔帶殺死,
又過了兩年, 宋襄王的兒子宋成公又來像晉文公求救, 說宋國遭到楚國聯合鄰國的攻擊, 這時, 有大臣說, 楚國總是欺負中原諸侯國, 您要幫助有困難的國家, 建立霸業, 現在是時候了。
有大臣建議, 曾國與衛國都歸附了楚國,
西元前632年, 晉文公攻下了曹國和衛國, 楚成王得到了這個消息, 馬上下令讓成得臣回去。 成得臣覺得很快就能攻破宋國, 因此十分不願意退兵, 於是他向楚成王報告說:“請再等幾天, 打了勝仗便回去,
楚成王心裡很不高興, 便只給了小部分士兵讓成得臣指揮。
成得臣見楚成王一直催促自己, 而且宋國又死守著城門, 於是他下令停止攻擊, 可是又不好意思馬上退兵。 他派人去和晉文公說, 如果您能夠恢復曹國和衛國, 我就不再攻打宋國。
晉文公暗地裡通知了曹國和衛國, 對他們說, 如果和楚國斷交, 就恢復他們的王位, 曹衛兩國按照晉文公的意思做了。
成得臣知道這件事後, 氣的大罵, 立即下令, 讓軍隊朝著晉文公軍隊駐紮的地方去。
晉國大將先軫一瞧楚國人過來, 就打算立刻開戰。 狐偃攔住他說:“當初主公在楚王面前曾經說過,
狐偃接著說:“我們不能忘了當初楚王的好意。 退避三舍是向楚王表示好意, 並不是害怕成得臣。 如果他們就此退兵或者不再追上來的話, 我們兩國就很容易講和了。 如果他們仍然窮追猛打, 那麼理就在我們這邊了, 將士們打起仗來也更有力氣, 這樣對我們來說不是更有利嗎?
成得臣一向不把晉國放在眼裡, 看到晉國撤退後, 便立刻追了上去, 不料中了計。 問過軍隊前後夾擊, 將楚軍打的魂不守舍。
此時, 晉文公吩咐軍隊向後撤退, 一口氣就退了三十裡。 可是楚軍依然在向前行進, 於是晉軍再向後退了三十裡, 離楚軍已經很遠了。 可是晉文公接到消息, 楚軍又跟上來了。 這樣晉軍又向後退了三十裡, 總共後退了九十裡, 實現了當初“退避三舍”的諾言。 晉軍到了城濮駐紮下來, 不再往後退了。