南京濱臨長江,是水路與陸路交通彙合處,北據長江之險,南扼東南各省之咽喉,曆來是兵家必爭之地。武昌起義之前,南京駐有新軍第九鎮,由徐紹楨統領。並有舊軍的江北防營和江寧巡防隊等,由江南提督張勳統領。新軍第九鎮的許多官兵曾受革命黨人的影響而傾向於革命。廣州起義中的趙聲就曾經是該鎮的一位統帶(團長),武昌義旗一舉,第九鎮以統製徐紹楨為首的官兵立即向革命轉化。
11月7日新軍第九鎮就曾響應武昌起義,從駐地秭陵出發進攻南京,但由於子彈配備過少而失敗,然後退駐鎮江。鑒於南京地理位置十分重要,革命黨人認為攻克南京是發展革命的首要任務。於是宋教仁等革命黨人在上海召集緊急會議,決議策動組織由江蘇、浙江、上海等地革命黨人組成江浙聯軍,推舉徐紹楨為總司令,準備再次進攻南京。並在鎮江建立江浙聯軍司令部,總兵站設在上海。隨後電請光複各省派兵增援,先後到達鎮江的援軍有:洪承點所率滬軍1000人,黎天才所率粵軍600人,劉之潔所率蘇軍3000人,朱瑞所率浙軍3000人,再加上林述慶、柏文蔚所率鎮軍(新軍原駐鎮江部)等,共14000多人。
清軍在南京城郊駐有張勳的江防營約6000人,王有宏的巡防營約6000人,徐州鎮胡令宣部2000人,督署衛隊2000人,旗營兵3000人,共約2萬人左右,略多於革命軍,而且武器裝備優於革命軍,但軍心渙散,戰鬥力並不強。
江浙聯軍組成後,即商討攻城計劃。經研究確定,聯軍主攻方向是紫金山上的天保城,天保城是南京的製高點,拿下它即可居高臨下,使整個南京控製在火力範圍之內。革命軍的另一部進攻雨花台以牽製敵軍。具體部署是,主攻分三路進軍:鎮軍擔任中路進攻天保城,浙軍擔任左翼向幕府山進攻,粵軍擔任右翼沿滬寧鐵路向烏龍山進攻,兩翼配合中路占領天保城。蘇軍進攻雨花台,滬軍為總預備隊,淮軍和揚軍執行江防警衛任務,海軍遊弋高資一帶江麵,掩護陸上進攻。
11月25日,江浙聯軍向南京發起總攻擊。鎮軍主攻天保城,天保城駐有江防兵一營,旗兵4000人,炮10餘門,機槍4挺,兵力不算多。但天保城城堡險峻,屢攻不克,革命軍傷亡甚重。在粵軍攻下烏龍山後,立即與浙軍合力攻幕府山炮台,11月29日拂曉兩軍聯合攻下幕府山炮台。隨後粵、浙兩軍又與鎮軍圍攻天保城,12月1日終於將天保城攻克。在戰鬥中革命軍爭先恐後,衝鋒陷陣,殲敵1000多名,俘虜敵人數千名,清軍巡防營首領王有宏騎馬督戰,被浙軍擊斃。在天保城酣戰之際,蘇軍攻克雨花台。至此革命軍大獲全勝,南京重要據點全部被江浙聯軍占領,南京城中之敵已是甕中之鱉,唾手可得。
但頑固的清軍首領張勳拒不投降,企圖負隅頑抗,於是聯軍用大炮轟擊清軍了望台太平門和張勳的指揮部所北極閣,炮聲一陣緊過一陣,清軍傷亡慘重。這時兩江總督張人俊、江寧將軍鐵良和張勳見南京固守無望,便通過洋人佯裝向革命軍投降。正在交涉受降事宜之時,乘革命軍不備,張人俊、鐵良逃到下關乘日本兵艦逃往上海。張勳則率2000人經下關、浦口向徐州逃竄而去。12月2日巡防營統領張聯升率清軍殘部,開城投降,江浙聯軍勝利進入南京城,全城光複。
南京光複時正是漢口、漢陽相繼失守後的第六天。綜觀革命鬥爭全局,雖然漢口、漢陽已陷入敵手,但又出現了新的革命中心南京,而且革命力量在整體上又有所增長。江浙聯軍之所以能攻克南京,主要原因是聯軍各部能緊密配合,攻天保城便是最好的戰例。其次,聯軍的戰略戰術也運用得當,主攻天保城,拿下天保城後整個南京便控製在自己手中。但聯軍沒有識破張人俊等人的詐降詭計,致使未能全殲南京守敵。