孫傳芳經過江西、福建、浙江連續的失敗,基本部隊殘破不堪,勢難在寧滬立足,同時又看到張宗昌對江南這塊肥肉,虎視眈眈,索性做個順水人情,把上海地盤送給直魯軍。
一九二七年二月二十三日,白崇禧去嘉興視察前沿陣地。接上海送來的情報,說孫傳芳軍仍在松江附近的滬杭路第三十一號鐵橋佈防,但孫部主力已退往江北。
二月二十七日,蔣介石電杭州何應欽、白崇禧指示攻取上海及南京戰略,其方針爲:東路軍應俟程潛指揮的江右軍由蕪湖向南京攻擊前進後才重新採取攻勢。屆時何應欽指揮第十四、第十七兩軍及第一軍一部由宜興、丹陽出鎮江,切斷滬寧路敵軍的補給線,白崇禧指揮第二十六軍,第一軍第一、二兩師及先遣隊由嘉興直取上海。
白崇禧對於上海,本有不戰而佔領的計劃。直魯聯軍於二月二十四日進駐上海後,該軍第五路總司令兼第八軍軍長畢庶澄(1894—1927,追隨張宗昌,1926年授澄威將軍。1927年4月4日,持有張宗昌手諭的褚玉璞用電話召畢庶澄到省城商談軍事。畢只帶衛隊團長馬文龍赴濟南,剛下火車,就被褚玉璞的伏兵亂槍擊斃。)曾派代表到杭州向白崇禧洽談歸降條件。白氏疑此乃緩兵之計,虛與委蛇,仍積極做攻滬準備。後蘇聯軍事總顧問加侖將軍致電駐東路軍前敵總指揮部的蘇聯顧問尼基京將軍說:“我們如不及時進軍上海,罷工工人有被鎮壓的危險,務必說服白崇禧將軍趁敵人混亂之際,開展對上海的攻勢,總司令的進軍令隨後下達。”(《加侖將軍在中國》,第六十頁,中國社會科學出版社。)
三月十九日,白崇禧開始進攻松江和吳江。松江、黃浦南岸爲周蔭人殘餘部隊駐守,一被攻擊即向上海退卻。第二十六軍周鳳歧部跟蹤追躡,出得勝港,取明星橋,和正面進攻的第一軍第二師劉峙部夾擊堅守第三十一號鐵橋的畢庶澄軍。二十二日,於克松江城中,將畢庶澄部四混成旅解決,殘敵北逃,第二十六軍追擊到南翔。第一軍第二師追到青浦、崑山,再解決一個混成旅,這表明直魯聯軍毫無戰意,不堪一擊。
當畢庶澄從上海調兵往松江增援時,第一軍第一師薛嶽部已由便衣隊做嚮導,由明星橋進襲上海,先遣隊、別動隊在內部響應,三月二十一日,遂不戰而佔領上海南部龍華。畢庶澄軍在上海北面滬寧鐵路總站的部隊爲數尚多,中國領導下的總工會爲了迎接革命軍的到來,計劃不失時機地採取一種非常行動。三月二十一日午,在領導人周恩來領導下,上海工人第三次武裝起義爆發了。他們先襲擊警署奪得槍支,然後向北站畢軍進攻,畢軍見事急,向吳淞調來救兵。可是鐵路被工人糾察隊破壞,救兵乘坐的火車在中途傾覆。這些救軍從翻車中出來,神魂顛倒,誤以爲北站已被革命軍佔領了,遂發炮向那裡轟擊。北站畢軍又誤會救兵是革命軍,以牙還牙,彼此對打了二十小時。上海工人糾察隊看到事不宜遲,乘機進攻北站,來勢之猛,畢軍難於抵禦。恰巧二十二日上午,白崇禧率第一軍第一師的先頭部隊到龍華,即派一部兵力協同工人糾察隊進攻。一個衝鋒,畢軍便全部瓦解,繳械投誠。畢庶澄孑然一身,逃到上海租界去了。這一天,南市舉行了五萬人的大會歡迎國民革命軍克復上海。二十三日,又開一個全市二十萬人的歡迎大會,慶祝光復上海。